将数据框中的每个列表转换为普通列
Converting each list within a dataframe to a normal column
我从网上的几个来源生成了一个数据框,这些来源事先清理过,然后用
选择
cleans <- ls()
cleans <- cleans[grepl("Clean_News", cleans)]
我第一次尝试将它们绑定在一起的灵感来自 Stack Overflow 上的一个解决方案:
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 中的普通列。我在 Stack Overflow 上尝试了很多手工制作的函数,但 none 对我有用(由于我缺乏经验,我猜......)。
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))
但有一个巨大的缺点,我没有成功地将数据框的名称作为行名/或第一列放入数据框...
所以,我的第二个问题是如何将单个数据帧的名称附加到巨大 df 的每一行,而不是像下面的代码行那样的 id。
t2 <- rbindlist(lapply(cleans, get), idcol = "id")
这不太好,因为我需要 x 次重复所有数据帧的名称作为标识符,例如并且由于这是一个包含数千个网页的自动化过程,所以我事先不知道每个数据框中的行数。数据如下:
news1 data1 data2
news1 data5 data6
news2 data3 data4
and so on.
我尝试了这些方法
nr <- length(cleans)
names <- rep(cleans, nr)
names <- sort(names)
但收效甚微。
我们可以通过遍历数据集的列来做到这一点,unlist
list
列
lst <- lapply(All_News, unlist)
然后,根据最大长度(max(lengths(lst))
),通过在末尾填充 NA 使 list
元素的长度相同,并将其转换为 data.frame
data.frame(lapply(lst, `length<-`, max(lengths(lst))))
我从网上的几个来源生成了一个数据框,这些来源事先清理过,然后用
选择cleans <- ls()
cleans <- cleans[grepl("Clean_News", cleans)]
我第一次尝试将它们绑定在一起的灵感来自 Stack Overflow 上的一个解决方案:
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 中的普通列。我在 Stack Overflow 上尝试了很多手工制作的函数,但 none 对我有用(由于我缺乏经验,我猜......)。 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))
但有一个巨大的缺点,我没有成功地将数据框的名称作为行名/或第一列放入数据框... 所以,我的第二个问题是如何将单个数据帧的名称附加到巨大 df 的每一行,而不是像下面的代码行那样的 id。
t2 <- rbindlist(lapply(cleans, get), idcol = "id")
这不太好,因为我需要 x 次重复所有数据帧的名称作为标识符,例如并且由于这是一个包含数千个网页的自动化过程,所以我事先不知道每个数据框中的行数。数据如下:
news1 data1 data2
news1 data5 data6
news2 data3 data4
and so on.
我尝试了这些方法
nr <- length(cleans)
names <- rep(cleans, nr)
names <- sort(names)
但收效甚微。
我们可以通过遍历数据集的列来做到这一点,unlist
list
列
lst <- lapply(All_News, unlist)
然后,根据最大长度(max(lengths(lst))
),通过在末尾填充 NA 使 list
元素的长度相同,并将其转换为 data.frame
data.frame(lapply(lst, `length<-`, max(lengths(lst))))