在对以下数据帧中的值进行重新编码时,我试图合并行:
Days Object Frequency
1 1 Fruit 20
2 2 Fruit 21
3 3 Fruit 41
4 4 Fruit 12
5 5 Fruit 1
6 6 Fruit 9
8 8 Fruit 1
9 9 Fruit 14从本质上讲,我想把这些日子分组成这样的分类变量:
Days Object Frequency
1 1-2 Fruit 41
2 3-4 Fruit 43
3 5+ Fruit 25在为Days列创建新值的同时,是否有任何方法进行合并?
抱歉,如果这是个愚蠢的问题
发布于 2017-09-28 13:24:09
在基数R中,可以将cut和aggregate组合起来。在这里,cut生成日组,并向这些组提供标签。这是在一个带有Object的列表中输入给aggregate以执行完整分组。aggregate将频率作为其第一个参数并应用sum。
aggregate(dat$Frequency, list(Days=cut(dat$Days, c(-Inf, 2, 4, Inf),
labels=c("1-2", "2-4", "5+")),
object=dat$Object),
sum)这会返回
Days object x
1 1-2 Fruit 41
2 2-4 Fruit 53
3 5+ Fruit 25要重命名x变量,可以将其包装在setNames中,也可以在第二行中使用names<-。
与此等价的data.table是
library(data.table)
setDT(dat)[, sum(Frequency),
by=list(Days=cut(dat$Days, c(-Inf, 2, 4, Inf), labels=c("1-2", "2-4", "5+")),
object=dat$Object)]
Days object V1
1: 1-2 Fruit 41
2: 2-4 Fruit 53
3: 5+ Fruit 25发布于 2017-09-28 13:19:00
您可以在group_by中动态创建组变量,然后进行汇总(假设您也希望按Object分组):
df %>%
group_by(Days = if_else(Days %in% c(1,2), "1-2", if_else(Days %in% c(3,4), "3-4", "5+")),
Object) %>%
summarise(Frequency = sum(Frequency))
# A tibble: 3 x 3
# Groups: Days [?]
# Days Object Frequency
# <chr> <fctr> <int>
#1 1-2 Fruit 41
#2 3-4 Fruit 53
#3 5+ Fruit 25https://stackoverflow.com/questions/46470099
复制相似问题