dplyr group_by只有一些值
问题描述:
我有一个数据帧,df像这样... df = data.frame(w = c('CT','CT','CT','CT','CT','CT'), x = c('PF','PF','MF','MF','AF','AF'), y = sample(letters, 6), z = seq(1:6))
它已经被w和y分组了。我想用x做一个新的分组,但只有在x = PF或MF的情况下。如果x = AF,我需要保留y,否则NA或其他一些唯一的数字就可以。在总结函数是z的总和,因此最终的数据帧将...dplyr group_by只有一些值
w x y z
CT PF NA 3
CT MF NA 7
CT AF s 5
CT AF h 6
我使用dplyr并试图group_by (Flyway %in% c('MF','PF'))
但只得到一个新列TRUE/FALSE。也许我应该在dplyr之外寻找?谢谢。
答
你可以改变y
,再组的数据和计算的z
总和:
df %>%
ungroup %>%
mutate(y = replace(y, x != "AF", NA)) %>%
group_by(w, x, y) %>%
summarise(z = sum(z)) %>%
ungroup()
#Source: local data frame [4 x 4]
#
# w x y z
# (fctr) (fctr) (fctr) (int)
#1 CT AF h 5
#2 CT AF l 6
#3 CT MF NA 7
#4 CT PF NA 3
或者短一点
df %>%
group_by(w, x, y = replace(y, x != "AF", NA)) %>%
summarise(z = sum(z)) %>%
ungroup()
答
我们也可以使用data.table
。将'data.frame'转换为'data.table'(setDT(df)
),对于'x'中不是'AF'的值,将'y'分配给'NA',按'w'分组, x'和'y',我们得到'z'的sum
。
library(data.table)
setDT(df)[x!='AF', y:=NA_character_][,list(z=sum(z)) ,.(w,x,y)]
# w x y z
#1: CT PF NA 3
#2: CT MF NA 7
#3: CT AF b 5
#4: CT AF o 6
注意:'y'列中的不同值是由于在构建数据集时没有设置种子。
谢谢。我认为这会很简单,但从未修改过分组变量。这将在未来真正有用! – tjr