我有一个如下所示的数据框:
state year value
1 1980 4
1 1981 5
1 1982 4
2 1980 2
2 1981 3
2 1982 4
100 1980 3
100 1981 2
100 1982 5
在实际数据集中,状态多于此处显示的状态。我想在状态100和所有其他状态之间进行比较。
[具体地说,对于每个州,我想找出该州在特定年份给出的值与在同一年份为州100给出的值之间的差。下面,我展示了如何比较状态1和状态100之间的1980年的值。
df_1 <- df %>% filter(state == 1) df_100 <- df %>% filter(state == 100) df_1_1980 <- df_1 %>% filter(year == 1980) df_100_1980 <- df_100 %>% filter(year == 1980) difference <- df_1_1980$value - df_100_1980$value
我如何才能针对数据框中的所有其他州和年份执行此操作?
我考虑过的一种可能性是制作一个仅由状态100的数据组成的数据帧,然后将其连接到原始数据帧,如下所示:
state year value state100 year100 value100 1 1980 4 100 1980 3 1 1981 5 100 1981 2 1 1982 4 100 1982 5 2 1980 2 100 1980 3 2 1981 3 100 1981 2 2 1982 4 100 1982 5
然后我可以从df $ value100的每一行中减去df $ value。我认为有更好的方法可以做到这一点。
我有一个如下所示的数据框:州年值1 1980 4 1 1981 5 1 1982 4 2 1980 2 2 1981 3 2 1982 4 100 1980 3100 1981 2 100 ...
library(dplyr)
df %>%
filter(state != 100) %>%
left_join(df %>%
filter(state == 100) %>%
select(-state), by = c('year')) %>%
transmute(state, year, value = value.x, difference = value.x - value.y)
# state year value difference
#1 1 1980 4 1
#2 1 1981 5 3
#3 1 1982 4 -1
#4 2 1980 2 -1
#5 2 1981 3 1
#6 2 1982 4 -1