假设数据:
hypo <- data.frame('X1' = c('a','b','a','b','a','b','a','b'),
'X2' = c('x','x','y','y','x','x','y','y'),
'X3' = c('m','m','m','m','n','n','n','n'),
'X4' = c(1,6,4,9,10,7,8,3))
输出:
X1 X2 X3 X4
1 a x m 1
2 b x m 6
3 a y m 4
4 b y m 9
5 a x n 10
6 b x n 7
7 a y n 8
8 b y n 3
当X1和X2值相同且X3不同时,您希望找到X4值之间的差异。例如,我们可以使用subset():
为单个值执行此操作value <- (subset(hypo, X1 == 'a' & X2 == 'x' & X3 == 'm')$X4
- subset(hypo, X1 == 'a' & X2 == 'x' & X3 == 'n')$X4)
# -9
我们如何才能这样做,以便为X1和X2相同且X3不同的所有实例计算X4值之间的差异?
理想输出:
X1 X2 m-n
1 a x -9
2 b x -1
3 a y -4
4 b y 6
非常感谢任何帮助。
答案 0 :(得分:2)
dplyr
非常简单。只需group_by
您希望相同的两个变量,然后summarise
与diff
一起减去这两个变量。它默认为n-m,因此将其设为负值以获得m-n:
> library(dplyr)
> hypo %>% group_by(X1, X2) %>% summarise(-diff(X4))
Source: local data frame [4 x 3]
Groups: X1 [?]
X1 X2 -diff(X4)
(fctr) (fctr) (dbl)
1 a x -9
2 a y -4
3 b x -1
4 b y 6
答案 1 :(得分:2)
这个明确指出它应该计算m-n
而不是n-m
。
library(dplyr)
hypo %>% group_by(X1, X2) %>%
summarize(`m-n` = X4[X3=="m"] - X4[X3=="n"])