dplyr group_仅由一些值组成
我有一个数据框,df是这样的…dplyr group_仅由一些值组成,r,dplyr,R,Dplyr,我有一个数据框,df是这样的…df=data.frame(w=c('CT','CT','CT','CT','CT','CT','CT'),x=c('PF','PF','MF','MF','AF','AF'),y=sample(字母,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
df=data.frame(w=c('CT','CT','CT','CT','CT','CT','CT'),x=c('PF','PF','MF','MF','AF','AF'),y=sample(字母,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,并试图
分组(Flyway%在%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()
您可以先更改
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”的和
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”列中的不同值是由于在构造数据集时未设置种子。我们也可以使用数据。表
。将“data.frame”转换为“data.table”(setDT(df)
),对于“x”中不是“AF”的值,将(:=
)y分配到“NA”,按“w”、“x”和“y”分组,我们得到“z”的和
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”列中的不同值是由于在构造数据集时未设置种子。谢谢。我认为这相当简单,但从未修改过分组变量。这将是真正有用的未来!谢谢我认为这相当简单,但从未修改过分组变量。这将是真正有用的未来!