根据 R 中另一个数据框的索引创建新数据框
Creating a new dataframe based on index of another dataframe in R
假设数据:
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
如有任何帮助,我们将不胜感激。
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
这个很明确,它应该计算 m-n
而不是 n-m
。
library(dplyr)
hypo %>% group_by(X1, X2) %>%
summarize(`m-n` = X4[X3=="m"] - X4[X3=="n"])
假设数据:
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
如有任何帮助,我们将不胜感激。
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
这个很明确,它应该计算 m-n
而不是 n-m
。
library(dplyr)
hypo %>% group_by(X1, X2) %>%
summarize(`m-n` = X4[X3=="m"] - X4[X3=="n"])