【问题标题】:Subset a list of data.frames and return list of data.frames子集 data.frames 列表并返回 data.frames 列表
【发布时间】:2013-07-30 11:44:02
【问题描述】:

我意识到这个问题与this one(以及其他问题)非常相似,但是我似乎无法修改解决方案以适应我的问题。如果需要,请标记为重复或指向现有答案的链接。以下是根据上述问题稍作修改的一些示例数据:

a=c(1,2,3,4,5,6)
b=c(4,5,6,5,5,5)
c=c(3,4,5,6,7,8)
A=data.frame(a=a,b=b,c=c)
B=data.frame(a=c,b=b,c=a)
C=data.frame(a=b,b=c,c=a)
l <- list(A, B, C)

我想生成一个数据帧列表,它是匹配条件的原始数据帧(在l 中)的子集。例如,我可能希望返回所有大于或等于 4 的值,并将较低的值替换为 NA,以便我的新列表 subsetl 如下所示。 (我不关心将 NA 保持在数据框中的正确位置。)

> subsetl
[[1]]
a b  c
1 NA 4 NA
2 NA 5  4
3 NA 6  5
4  4 5  6
5  5 5  7
6  6 5  8

[[2]]
a b  c
1 NA 4 NA
2  4 5 NA
3  5 6 NA
4  6 5  4
5  7 5  5
6  8 5  6

[[3]]
a  b  c
1 4 NA NA
2 5  4 NA
6  5 NA
4 5  6  4
5 5  7  5
6 5  8  6

我希望我的例子足够清楚,可以理解,但如果不是,请告诉我。毫无疑问,使用lapplysapply 等很简单,但在使用列表时我无法正确使用语法,尤其是当数据帧列表是所需的结果时。

【问题讨论】:

    标签: r dataframe subset


    【解决方案1】:

    这应该为你做:

    subsetl <- lapply(l,function(x) {
        x[x<4] <- NA
        return(x)
    })
    

    结果:

    >subsetl
    [[1]]
       a b  c
    1 NA 4 NA
    2 NA 5  4
    3 NA 6  5
    4  4 5  6
    5  5 5  7
    6  6 5  8
    
    [[2]]
       a b  c
    1 NA 4 NA
    2  4 5 NA
    3  5 6 NA
    4  6 5  4
    5  7 5  5
    6  8 5  6
    
    [[3]]
      a  b  c
    1 4 NA NA
    2 5  4 NA
    3 6  5 NA
    4 5  6  4
    5 5  7  5
    6 5  8  6
    

    【讨论】:

    • 嗨,Thomas,这很好,这正是我得到的,尽管解释很糟糕。谢谢。
    • 另一个:mapply(replace, l, lapply(l, '&lt;', 4), NA, SIMPLIFY = FALSE)
    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2012-08-06
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多