R 警告:“数据长度不是行数的子倍数或倍数”

R Warning: "data length is not a sub-multiple or multiple of the number of rows"

提问人:stats_noob 提问时间:7/29/2021 更新时间:7/29/2021 访问量:3700

问:

我正在使用 R 编程语言。

我有一个“列表”(称为“l”),其格式如下:

$`1`
   random_1 random_2 random_3 random_4 split_1 split_2 split_3         b         c total
1:       80       85       85       90     0.4     0.4     0.4 0.3333333 0.4002006   0.4

$`2`
   random_1 random_2 random_3 random_4 split_1 split_2 split_3         b         c total
1:       85       85       85       90     0.4     0.4     0.4 0.3333333 0.4002006   0.4

$`3`
   random_1 random_2 random_3 random_4 split_1 split_2 split_3 a         b         c total
1:       90       85       85       90     0.4     0.4     0.4 0 0.3333333 0.3985944 0.398

$`4`
   random_1 random_2 random_3 random_4 split_1 split_2 split_3 a         b         c total
1:       95       85       85       90     0.4     0.4     0.4 0 0.3333333 0.3985944 0.398

使用“str”语句时,可以查看有关列表的详细信息:

str(l)

List of 20
 $ 1 :Classes ‘data.table’ and 'data.frame':    1 obs. of  10 variables:
  ..$ random_1: num 80
  ..$ random_2: num 85
  ..$ random_3: num 85
  ..$ random_4: num 90
  ..$ split_1 : num 0.4
  ..$ split_2 : num 0.4
  ..$ split_3 : num 0.4
  ..$ b       : num 0.333
  ..$ c       : num 0.4
  ..$ total   : num 0.4
  ..- attr(*, ".internal.selfref")=<externalptr> 
  ..- attr(*, "sorted")= chr [1:7] "random_1" "random_2" "random_3" "random_4" ...
 $ 2 :Classes ‘data.table’ and 'data.frame':    1 obs. of  10 variables:
  ..$ random_1: num 85
  ..$ random_2: num 85
  ..$ random_3: num 85
  ..$ random_4: num 90
  ..$ split_1 : num 0.4
  ..$ split_2 : num 0.4
  ..$ split_3 : num 0.4
  ..$ b       : num 0.333
  ..$ c       : num 0.4
  ..$ total   : num 0.4
  ..- attr(*, ".internal.selfref")=<externalptr> 
  ..- attr(*, "sorted")= chr [1:7] "random_1" "random_2" "random_3" "random_4" ...
 $ 3 :Classes ‘data.table’ and 'data.frame':    1 obs. of  11 variables:
  ..$ random_1: num 90
  ..$ random_2: num 85
  ..$ random_3: num 85
  ..$ random_4: num 90
  ..$ split_1 : num 0.4
  ..$ split_2 : num 0.4
  ..$ split_3 : num 0.4
  ..$ a       : num 0
  ..$ b       : num 0.333
  ..$ c       : num 0.399
  ..$ total   : num 0.398
  ..- attr(*, ".internal.selfref")=<externalptr> 
  ..- attr(*, "sorted")= chr [1:7] "random_1" "random_2" "random_3" "random_4" ...

使用这个stackoverflow帖子:将列表转换为数据框,我尝试了三种不同的方法将这个“列表”转换为“数据框”:

方法1:不起作用

df = do.call(rbind.data.frame, l)

Error in (function (..., deparse.level = 1, make.row.names = TRUE, stringsAsFactors = default.stringsAsFactors(),  : 
  numbers of columns of arguments do not match

方法2:部分工作,但有警告

df <- data.frame(matrix(unlist(l), nrow=length(l), byrow=TRUE))

Warning message:
In matrix(unlist(l), nrow = length(l), byrow = TRUE) :
  data length [212] is not a sub-multiple or multiple of the number of rows [20]
df <- data.frame(matrix(unlist(l), nrow=length(l), byrow=TRUE))

出于某种原因,“方法 2”中的代码在生成的数据框中放置了几个 0。

方法3:完全有效(据我所知)

    library(plyr)
    df <- ldply (l, data.frame)

head(df)

  .id random_1 random_2 random_3 random_4 split_1 split_2 split_3         b         c total  a
1   1       80       85       85       90     0.4     0.4     0.4 0.3333333 0.4002006 0.400 NA
2   2       85       85       85       90     0.4     0.4     0.4 0.3333333 0.4002006 0.400 NA
3   3       90       85       85       90     0.4     0.4     0.4 0.3333333 0.3985944 0.398  0
4   4       95       85       85       90     0.4     0.4     0.4 0.3333333 0.3985944 0.398  0
5   5      100       85       85       90     0.4     0.4     0.4 0.3333333 0.3985944 0.398  0
6   6       80       90       85       90     0.4     0.4     0.4 0.3333333 0.4004024 0.400 NA

问题:有谁知道为什么“方法 1”和“方法 2”不能正常工作,但“方法 3”似乎工作正常?

谢谢

R 列表 帧数据 操作 Plyr

评论

2赞 akrun 7/29/2021
你试过吗rbindlist(l, fill = TRUE)
2赞 GuedesBF 7/29/2021
Data.Frame 中的 $3 缺少“A”列,但 $1 和 $2 有。因此,您的 data.frame 具有不同的长度,并且不容易绑定。@akruns评论应该有效
0赞 stats_noob 7/29/2021
阿克伦的评论非常有效!我以后必须记住这一点!

答: 暂无答案