在一行数据框和

时间:2016-03-01 11:24:50

标签: r merge split

我在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

有人可以帮忙吗?

2 个答案:

答案 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

```