This question already has answers here:
Reshaping a data.frame so a column containing multiple features becomes multiple binary columns

(4 个回答)


3年前关闭。




我有一个数据框,它有一堆数据,这些数据在行的某些元素中用逗号连接。看起来像的东西:
df <- data.frame(
c(2012,2012,2012,2013,2013,2013,2014,2014,2014)
,c("a,b,c","d,e,f","a,c,d,c","a,a,a","b","c,a,d","g","a,b,e","g,h,i")
)
 names(df) <- c("year", "type")

我想以 dcast 接近的形式得到它,年份、a、b、c 等是列,数据帧的频率在结果数据帧的单元格中。我首先尝试在 colsplit 上执行 df,然后在之后使用 dcast,但这似乎只有在我想在其中一个级别而不是所有级别上聚合时才有效。
 df2 <- data.frame( df$year,  colsplit(df$type, ',' , c('v1','v2','v3','v4','v5')) )
 df3 <- dcast(df2, df.year ~ v1)

这个结果只给了我 colsplit 的第一级,而不是所有的。我接近解决方案还是应该完全使用不同的方法?

最佳答案

这是 base R 的单行选项,通过将 'type' 列与 strsplit 分开,然后将 list 输出的名称设置为 'year',将 stack 设置为单个 data.frame 并使用 table 获取频率计数

table(stack(setNames(strsplit(as.character(df$type), ","), df$year))[2:1])
#        values
#ind    a b c d e f g h i
#  2012 2 1 3 2 1 1 0 0 0
#  2013 4 1 1 1 0 0 0 0 0
#  2014 1 1 0 0 1 0 2 1 1

关于r - 从数据框中聚合多列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45952908/

10-12 17:54
查看更多