将列表的data.frame转换为data.frame

时间:2014-10-09 17:15:17

标签: r list dataframe

我想转换这个data.frame

              Loc                        Time(h)
  Paris, Luxembourg                      10,15
Paris, Lyon, Berlin                    9,12,11

到这个

Loc               Time(h)
Paris             10
Luxembourg        15
Paris             9
Lyon              12
Berlin            11

2 个答案:

答案 0 :(得分:4)

如果安装了data.table,您可以使用Ananda Mahto cSplit function

如果dat是您的数据,

devtools::source_gist(11380733)
cSplit(dat, c("Loc", "Time"), direction = "long")
#            Loc Time
# 1:       Paris   10
# 2:  Luxembourg   15
# 3:       Paris    9
# 4:        Lyon   12
# 5:      Berlin   11

答案 1 :(得分:1)

假设数据框中的每个条目都是您在上面提到的表单中的字符串,您可以执行以下操作

#notice the space in ", " for the first line
newLoc<-sapply(df$Loc, function(entry) {unlist(strsplit(entry,", ", fixed=TRUE))})
#and the lack there of in the second
newTime<-sapply(df$`Time(h)`, function(entry) {unlist(strsplit(entry, ",", fixed=TRUE))})

我认为我们还需要压缩结果

dim(newLoc)<-NULL
dim(newTime)<-NULL

然后组合成一个df

data.frame(cbind(Loc=newLoc, `Time(h)`=newTime))