dplyr group_by只有一些值

时间:2015-12-21 21:13:42

标签: r dplyr

我有一个数据框,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的总和,因此最终数据框将是......

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外面寻找?感谢。

2 个答案:

答案 0 :(得分:3)

您可以先更改width for store value = actual width for this device / device width,然后对数据进行分组并计算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

答案 1 :(得分:1)

我们也可以使用data.table。将'data.frame'转换为'data.table'(setDT(df)),对于'x'中的值不是'AF',将(:=)'y'分配给'NA' ,按'w','x'和'y'分组,我们得到'{'}的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'列中的不同值是由于在构建数据集时未设置种子。