【问题标题】:Using lapply to subset rows from data frames -- incorrect number of dimensions error使用 lapply 对数据帧中的行进行子集——不正确的维数错误
【发布时间】:2014-02-10 10:14:55
【问题描述】:

我有一个名为“scenbase”的列表,其中包含 40 个数据帧,每个数据帧为 326 行 x 68 列。我想使用 lapply() 对数据帧进行子集化,以便它们只保留第 33-152 行。我编写了一个名为 trim() 的简单函数(如下),并尝试将其应用于数据帧列表,但收到一条错误消息。该功能和我在 lapply 中使用它的尝试如下:

修剪

lapply(scenbase, trim)

i[33:152, ] 中的错误:维数不正确

当我尝试对列表(如下)中包含的单个数据框 (soil11base.txt) 之一执行相同操作时,它按预期工作:

soil11base.txt

知道我需要做什么才能使尺寸正确吗?

【问题讨论】:

    标签: r lapply subset


    【解决方案1】:

    您有 2 个解决方案。你可以

    (a) 分配给一个新列表newList = lapply(scenbase, function(x) { x[33:152,,drop=F]} )

    (b) 使用<<- 运算符将在lapply(1:length(scenbase), function(x) { scenbase[[x]] <<- scenbase[[x]][33:152,,drop=F]} ) 处分配修剪后的数据。

    您的呼叫不起作用,因为i 不在全局范围内。您可以通过调用<<- 运算符来解决这个问题,该运算符分配给它在连续父环境中找到的第一个变量。或者通过创建一个新的修剪列表。

    这是一些重现解决方案 (a) 的代码:

    listOfDfs = list()
    for(i in 1:10) { listOfDfs[[i]] = data.frame("x"=sample(letters,200,replace=T),"y"=sample(letters,200,replace=T)) }
    choppedList = lapply(listOfDfs, function(x) { x[33:152,,drop=F]} )
    

    这是一些重现解决方案 (b) 的代码:

    listOfDfs = list()
    for(i in 1:10) { listOfDfs[[i]] = data.frame("x"=sample(letters,200,replace=T),"y"=sample(letters,200,replace=T)) }
    lapply(1:length(listOfDfs), function(x) { listOfDfs[[x]] <<- listOfDfs[[x]][33:152,,drop=F]} )
    

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多