2016-03-01 97 views
0

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

退房'splitstackshape :: listCol_l' –

+0

丹娜丝您好,我曾试图用http://stackoverflow.com/questions/在这篇文章中描述的过程15930880/unlist-all-list-elements-in-a-dataframe 它将数据集分割为列,我无法弄清楚如何重新调整它以达到我想要的结果。 – theArun

+0

@DavidArenburg,谢谢!这正是我一直在寻找的!干杯! – theArun

回答

0

下面是一个使用@ DavidArenburg解决新COL3建议的包{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 

```

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,] 

并添加

yornewdata[,"new3"] <- unlist (yourdata$col3)