我有一个数据框,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外面寻找?感谢。
答案 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'列中的不同值是由于在构建数据集时未设置种子。