gpt4 book ai didi

r - 将数据框中的每个列表转换为普通列

转载 作者:行者123 更新时间:2023-12-02 03:56:18 26 4
gpt4 key购买 nike

我从网络上的多个来源生成一个数据框,这些数据框事先经过清理,然后使用

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

我第一次尝试将它们绑定(bind)在一起的灵感来自 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 上尝试了很多手工制作的函数,但没有一个对我有用(我猜是因为我缺乏经验......)。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)

但没有取得太大成功。

最佳答案

我们可以通过循环遍历数据集的列来实现此目的,取消列出 list

lst <- lapply(All_News, unlist)

然后,根据最大长度 (max(lengths(lst))) 在元素较少的元素末尾填充 NA,使 list 元素的长度相同) 并将其转换为 data.frame

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

关于r - 将数据框中的每个列表转换为普通列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43829470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com