【问题标题】:Apply function to list of dataframes and columns matching pattern将函数应用于匹配模式的数据框和列列表
【发布时间】:2020-09-24 11:56:42
【问题描述】:

我有一个数据框列表,我想将一个函数应用于特定列,这些列遵循列表中所有数据框的模式。

这是数据框的示例列表:

k_2 <- data.frame(Site = c(rep("A",3), rep("B",2)), V1 = c(1,2,3,4,5), V2 = c(1,2,3,4,5))
k_3 <- data.frame(Site = c(rep("A",3), rep("B",2)), V1 = c(1,2,3,4,5), V2 = c(1,2,3,4,5), V3 = c(1,2,3,4,5))
k_4 <- data.frame(Site = c(rep("A",3), rep("B",2)), V1 = c(1,2,3,4,5), V2 = c(1,2,3,4,5), V3 = c(1,2,3,4,5), V4 = c(1,2,3,4,5))
my.list <- list(k_2, k_3, k_4)
my.list

我想申请这个

k2_res <- ddply(k_2, "Site", function(x) colSums(x[c("V1", "V2")])/nrow(x))

到列表中的所有数据框。但是,对于 K_3,计算需要为 colSums(x[c("V1","V2","V3")]),而 k_4 将上升到 V4,依此类推。

想法

我想也许我可以使用某种grepregrex 来自动选择所有以V 开头的列?

【问题讨论】:

    标签: r regex list function dataframe


    【解决方案1】:

    你在寻找类似下面的东西吗?

    lapply(
      my.list,
      function(df) ddply(df, "Site", function(x) colSums(x[grepl("V\\d+", names(x))]) / nrow(x))
    )
    

    【讨论】:

    • 谢谢,这太完美了!你介意向我解释一下grepl()吗?另外,为什么使用grepl 而不是grep
    • @QPaps grepl 给出关于字符串中匹配模式的逻辑值,grep 给出索引。您可以在控制台中输入?grepl 以查看其用法。
    • 啊,这很有道理!非常感谢:D 有美好的一天!
    猜你喜欢
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2017-04-22
    • 2020-04-24
    • 1970-01-01
    相关资源
    最近更新 更多