【问题标题】:R How do I reference a colunm within a list of data.frames? And then use lapply?R如何引用data.frames列表中的列?然后使用 lapply?
【发布时间】:2023-04-07 01:09:01
【问题描述】:

假设我有一个数据框列表:

DF1 <- data.frame(mtcars)
DF2 <- data.frame(mtcars*2)
mydatalist <-list(DF1,DF2)

如何将函数应用于列表中的所有列,并返回结果列表?例如,假设我想提取 qsec 列的第一个数字(第 7 个)。我可以很容易地为第一项调用它:

mydatalist[[1]][7]

但是假设我想查看列表中每个元素(DF1 和 DF2)的所有第 7 列。我怎么称呼它?

这不起作用:

 mydatalist[[]][7]
 Error in mydatalist[[]] : invalid subscript type 'symbol'

我的目的是我想对其应用一个函数,比如 substr:

lapply(mydatalist[[1]][7],substr,0,2)
lapply(mydatalist[[2]][7],substr,0,2)

但这不起作用:

lapply(mydatalist[[]][7],substr,0,2)

我该怎么做?

谢谢!

【问题讨论】:

    标签: r list substr lapply


    【解决方案1】:

    要仅获取列表中每个数据框的第 7 列,可以使用

    lapply(mydatalist, "[", 7)  ## you can also get multiple columns with c(1,5,etc)
    

    将列作为数据框,而

    lapply(mydatalist, "[[", 7)
    

    将其视为矢量。要按名称引用它/它们,您可以像使用列号一样使用名称

    lapply(mydatalist, "[", "qsec")
    

    要在列上使用substr,首先您必须访问该列。然后你申请可以使用匿名函数来处理substr

    lapply(mydatalist, function(x) substr(x[[7]], 0, 2)) ## or x[["qsec"]]
    # [[1]]
    #  [1] "16" "17" "18" "19" "17" "20" "15" "20" "22" "18"
    # [11] "18" "17" "17" "18" "17" "17" "17" "19" "18" "19"
    # [21] "20" "16" "17" "15" "17" "18" "16" "16" "14" "15"
    # [31] "14" "18"
    # 
    # [[2]]
    #  [1] "32" "34" "37" "38" "34" "40" "31" "40" "45" "36"
    # [11] "37" "34" "35" "36" "35" "35" "34" "38" "37" "39"
    # [21] "40" "33" "34" "30" "34" "37" "33" "33" "29" "31"
    # [31] "29" "37"
    

    【讨论】:

    • @Nate 这是一个很棒的 R 技巧。 R 中的所有或几乎所有“特殊”运算符都被解析为与任何其他函数一样的函数
    • @ssdecontrol - 我猜如果你使用反引号而不是引号它会稍微快一些
    猜你喜欢
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多