我在R中有一个数据框形式的数据集,如下所示
col 1 col 2 col3 col 4
941 3605 c(0.035,0.298) 20/08/2013 00:00:00
929 3575 c(0.026,0.078,0.292) 20/08/2013 00:00:00
我想在第3列中拆分列表并将其添加到主数据框中,从而产生以下内容
col 1 col 2 col3 col 4
941 3605 0.035 20/08/2013 00:00:00
941 3605 0.298 20/08/2013 00:00:00
929 3575 0.026 20/08/2013 00:00:00
929 3575 0.078 20/08/2013 00:00:00
929 3575 0.0292 20/08/2013 00:00:00
有人可以帮忙吗?
答案 0 :(得分:0)
这样的事情可以帮到你
我理解col3是一个列表......如果不是第一个:
yourdata$col3 <- strsplit (yourdata$col3, ",")
然后找到col3中每个元素的长度
l <- sapply (yourdata$col3, length)
行数
N <- nrow (yourdata)
为新数据集
创建“索引”my.new.rows <- rep (1:N, times = l)
创建新数据集
yornewdata <- yourdata[my.new.rows,]
添加新col3
yornewdata[,"new3"] <- unlist (yourdata$col3)
答案 1 :(得分:0)
以下是使用@ DavidArenburg建议的软件包{splitstackshape}和软件包{dplyr}来整理转换的解决方案:
```
df <- data.frame(col_1 = c(941, 929),
col_2 = c(3605,3575),
col_3 = I(list(c(0.035, 0.298),c(0.026, 0.078, 0.292))),
col_4 = c("0/08/2013 00:00:00", "20/08/2013 00:00:00"))
res <- splitstackshape::listCol_l(df, listcol = "col_3", drop = TRUE)
res <- dplyr::select(res, col_1, col_2, col_3_ul, col_4)
names(res)[3] <- "col_3"
print(res)
## col_1 col_2 col_3 col_4
##1: 941 3605 0.035 0/08/2013 00:00:00
##2: 941 3605 0.298 0/08/2013 00:00:00
##3: 929 3575 0.026 20/08/2013 00:00:00
##4: 929 3575 0.078 20/08/2013 00:00:00
##5: 929 3575 0.292 20/08/2013 00:00:00
```