This question already has answers here:
Reshaping a data.frame so a column containing multiple features becomes multiple binary columns
(4 个回答)
3年前关闭。
我有一个数据框,它有一堆数据,这些数据在行的某些元素中用逗号连接。看起来像的东西:
我想以
这个结果只给了我
(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/