Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将嵌套列表(长度不等)转换为数据帧_R_Dataframe - Fatal编程技术网

R 将嵌套列表(长度不等)转换为数据帧

R 将嵌套列表(长度不等)转换为数据帧,r,dataframe,R,Dataframe,我有一个嵌套列表;对于某些指数,缺少一些变量 [[1]] sk ques pval "10" "sfsf" "0.05" [[2]] sk ques pval diff "24" "wwww" "0.11" "0.3" [[3]] sk ques pval diff imp "24" "wwww" "0.11" "0.3" "2" 如何将其转换为数据帧,其中第一行的数据$diff[1]=NA? 上

我有一个嵌套列表;对于某些指数,缺少一些变量

[[1]]
    sk   ques   pval 
  "10" "sfsf" "0.05" 

[[2]]
    sk   ques   pval   diff 
 "24" "wwww" "0.11"  "0.3" 

[[3]]
    sk   ques   pval   diff    imp 
  "24" "wwww" "0.11"  "0.3"    "2" 
如何将其转换为数据帧,其中第一行的数据$diff[1]=NA? 上述案例将是包含5个变量和3个观察值的数据框架

数据框中变量的数量将是列表元素中唯一名称的数量, 列表中缺少的值将替换为NA

谢谢,

编辑:数据格式

list(structure(c("10", "sfsf", "0.05"), .Names = c("sk", "ques", 
"pval")), structure(c("24", "wwww", "0.11", "0.3"), .Names = c("sk", 
"ques", "pval", "diff")), structure(c("24", "wwww", "0.11", "0.3", 
"2"), .Names = c("sk", "ques", "pval", "diff", "imp")))

通过使用
sapply
循环,我们得到
list
元素('indx')的
length
。在最新版本的
R
中,我们可以使用
length
替换
sapply(..,length)
步骤。我们将每个元素的
length
从'indx'更改为
max
长度(
length在每个列表元素中,是向量还是数据帧?它们看起来像命名的向量。您可以发布
dput(head(list,3))的输出吗
Good catch@RichardScriven。我假设它们是正确的data.frames。如果进行转换,您仍然可以使用
rbind.fill
:rbind.fill(lappy(mydata,函数(x)as.data.frames(t(x)))
尝试此解决方案时,行中出现
错误。names@jessi如果您将重复的行名称分配给
data.frame
,它将不会作为
data工作。frame
只能使用唯一的行名称,但矩阵的重复行名称是可以的。也就是说,如果没有
as.data.frame
@akrun,仅供参考,我今天测试了它,我的结果是:根据我文章中的示例,在调用最后一行代码之前,为数据帧指定colnames而不调用
colnames(res)@MartinSöderström,其中“V4”和“V5”是第4列和第5列的列名,这两个列的名称随
colnames(res)更改@akrun如果是嵌套列表怎么办?[[1]]sk ques pval[[act]]“10”“sfsfsf”“0.05”“时间”
 indx <- sapply(lst, length)
 #indx <- lengths(lst) 
 res <- as.data.frame(do.call(rbind,lapply(lst, `length<-`,
                          max(indx))))

 colnames(res) <- names(lst[[which.max(indx)]])
 res
 # sk ques pval diff  imp
 #1 10 sfsf 0.05 <NA> <NA>
 #2 24 wwww 0.11  0.3 <NA>
 #3 24 wwww 0.11  0.3    2
 lst <- list(structure(c("10", "sfsf", "0.05"), .Names = c("sk", "ques", 
 "pval")), structure(c("24", "wwww", "0.11", "0.3"), .Names = c("sk", 
 "ques", "pval", "diff")), structure(c("24", "wwww", "0.11", "0.3", 
 "2"), .Names = c("sk", "ques", "pval", "diff", "imp")))