一个数据帧中的每一个转换列表到正常列(Converting each list within a d

2019-09-26 15:01发布

我产生一个数据帧从网站若干源被预先清洁,然后与选择的

cleans <- ls() 
cleans <- cleans[grepl("Clean_News", cleans)]

我第一次将它们绑定在一起的尝试灵感来自于堆栈溢出的解决方案:

All_News <- mapply(get, grep("Clean_News", ls(), value=T))
All_News <- data.frame(t(All_News))
All_News <- as.data.frame(All_News)

然而,这对我来说是一个问题,因为结果是一个数据帧,其中每列是整数或字符的列表。 所以,我的主要问题是如何在DF中的每个列表数据帧中转换为常规列。 我试图对堆栈溢出许多手工制作的功能,但没有工作对我来说(由于我没有经验,我想...)。 东风的形式

All_News <- data.frame(a=I(list(1,1:2,1:3)), b=I(list(4:6,7:9,10:11)))

另外,我尝试以下,其工作原理:

All_News <- do.call(rbind, lapply(cleans, get))

但是,有着巨大的缺点,我没有得到数据帧作为rownames /或第一列到数据帧的名字成功......所以,我的第二个问题是如何将单个数据帧的名称附加到每个巨大的DF的行,而不是像下面的代码行的ID。

t2 <- rbindlist(lapply(cleans, get), idcol = "id") 

这不太多好的,因为我需要所有的数据帧x的名字反复-times作为标识符,EG和因为这是与成千上万的网页的自动化过程,我不知道事先在每个数据帧的行数。 数据是这样的:

 news1 data1 data2
 news1 data5 data6
 news2 data3 data4
 and so on.

我想沿着这些线路的东西

nr <- length(cleans)
names <- rep(cleans, nr)
names <- sort(names)

但不是很成功。

Answer 1:

我们可以通过数据集的列循环做到这一点, unlistlist

lst <- lapply(All_News, unlist)

然后,进行的长度list元件通过填充NA相同末为那些基于最大长度具有更少的元件( max(lengths(lst))并将其转换为data.frame

data.frame(lapply(lst, `length<-`, max(lengths(lst))))


文章来源: Converting each list within a dataframe to a normal column