【问题标题】:How to transform elements in a list to dataframes in R如何将列表中的元素转换为R中的数据框
【发布时间】:2013-10-05 17:18:22
【问题描述】:

我在 R 中有一个小问题要解决。我在 R 中有这个列表 a1

> a1
[[1]]
  x1 x2 x3
1  1  1  1
2  2  2  2
3  2  2  2
4 13 13 13
5 12 12 12
6 23 23 23
7 12 12 12

[[2]]
  x1 x2 x3
1  2  2  2
2  2  2  2
3  2  2  2
4 13 13 13
5 12 12 12
6 23 23 23
7 12 12 12

[[3]]
  x1 x2 x3
1  3  3  3
2  2  2  2
3  2  2  2
4 13 13 13
5 12 12 12
6 23 23 23
7 12 12 12

我的问题是我无法将所有元素提取为数据框。例如,我使用此代码将它们提取为数据框,但出现此错误:

for(i in c(1:3))
{
  paste("a",i)=as.data.frame(a1[i])
}
Error in paste("a", i) = as.data.frame(a1[i]) : 
  target of assignment expands to non-language object

我的问题是列表有 20 个元素,当我输入 a1=as.data.frame(a1[1]) 时它可以工作,但我必须写很多行,因为显示的 for 代码不起作用。谢谢你的帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    您应该将您的元素保存在一个列表中,最好使用lapply 以避免副作用。例如尝试这样的事情:

     lapply(a1,write.csv)
    

    编辑添加 flodel 答案:

    filenames <- paste0(seq_along(a1), ".csv")
    mapply(write.csv, a1, file = filenames)
    

    【讨论】:

    • @SimonO101 不需要给出名字...a1 &lt;- list(data.frame(0),data.frame(1)) ;lapply(a1,write.csv);
    • 亲爱的@SimonO101 @agstudy 当我使用lapply(a1,write.csv) 我得到了这个"","x1","x2","x3" "1",1,1,1 "2",2,2,2 "3",2,2,2 "4",13,13,13 "5",12,12,12 "6",23,23,23 "7",12,12,12 "","x1","x2","x3" "1",2,2,2 "2",2,2,2 "3",2,2,2 "4",13,13,13 "5",12,12,12 "6",23,23,23 "7",12,12,12 "","x1","x2","x3" "1",3,3,3 "2",2,2,2 "3",2,2,2 "4",13,13,13 "5",12,12,12 "6",23,23,23 "7",12,12,12 [[1]] NULL [[2]] NULL [[3]] NULL
    • 并且任何.csv文件都写在我的目录中
    • 而是filenames &lt;- paste0(seq_along(a1), ".csv"); mapply(write.csv, a1, file = filenames);
    • @flodel 谢谢。我添加你的答案。
    【解决方案2】:

    如果我正确理解您的目标,分两步:

    1. 为您的列表项添加名称。
    2. 使用list2env 在您的工作区中创建对象。

    这是一个例子:

    mylist <- list(data.frame(matrix(1:4, ncol = 2)),
                   data.frame(matrix(5:8, ncol = 2)),
                   data.frame(matrix(9:12, ncol = 2)))
    names(mylist) <- LETTERS[seq_along(mylist)]
    mylist
    # $A
    #   X1 X2
    # 1  1  3
    # 2  2  4
    # 
    # $B
    #   X1 X2
    # 1  5  7
    # 2  6  8
    # 
    # $C
    #   X1 X2
    # 1  9 11
    # 2 10 12
    
    A
    # Error: object 'A' not found
    
    list2env(mylist, envir=.GlobalEnv)
    # <environment: R_GlobalEnv>
    
    A
    #   X1 X2
    # 1  1  3
    # 2  2  4
    

    【讨论】:

    • 是的..您应该提到最好将变量汇总在列表中...
    • @agstudy,有些事情应该经历才能学习,而不是告诉。 :)
    • @agstudy 这是因为我必须将列表中的元素保存为 excel 文件,而我不知道如何使用列表中的元素来实现。
    • @Duck,作为 Excel 文件还是 CSV?我不会从 R 中写入 Excel 文件,但使用 CSV,在 lapply 中使用 write.csv 非常简单。
    • @Duck,试试:Names &lt;- paste("file", 1:3, ".csv", sep="") lapply(seq_along(a1), function(x) write.csv(mylist[[x]], file = Names[x]))。 (这里假设您只有 3 个列表项。根据您的实际情况修改paste 步骤。)
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2021-11-21
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多