【问题标题】:apply function to certain columns of all dataframe in list and then assign value to columns将函数应用于列表中所有数据框的某些列,然后为列赋值
【发布时间】:2017-08-20 21:46:03
【问题描述】:

回答了类似的问题here

我有一个如下所示的数据框列表(即 1000 个):

> lst[1000]
$rand1000
                        Binomial         S4         S5    S6
254            Euastacus suttoni  25.816165  4.1916527  86.3
327            Orconectes hobbsi  16.726409  5.5241308  25.0
282           Faxonella creaseri  17.026970  6.4109494  18.0
319           Orconectes durelli  14.093957  7.2342324  35.0
525           Procambarus raneyi  15.799001  6.3746574  55.1

我想将函数应用于列表中所有数据框的 S4、S5 和 S6 列。所以我写了这个函数:

lapply(lst, function(x) {x$S4 <- sensitivity.rand(x[[2]], 25); x})

(这里的 'sensitivity.rand' 是一个函数,它接受 vectorthreshold(在上面的代码中 25 是阈值)并分配到 H 或 L)

输出为(这很好):

$rand1000
                        Binomial S4         S5    S6
254            Euastacus suttoni  H  4.1916527  86.3
327            Orconectes hobbsi  H  5.5241308  25.0
282           Faxonella creaseri  H  6.4109494  18.0
319           Orconectes durelli  H  7.2342324  35.0
525           Procambarus raneyi  H  6.3746574  55.1

但是如果我看到原始数据框没有改变(即它和以前一样)。我怎样才能做到这一点。我需要对列表中所有数据框的所有 S4、S5 和 S6 列执行此操作。这样原来的数据框就会变成这样:

> lst[1000]
$rand1000
                            Binomial S4  S5 S6
    254            Euastacus suttoni  H  H  H
    327            Orconectes hobbsi  H  L  H
    282           Faxonella creaseri  H  H  L
    319           Orconectes durelli  H  L  L
    525           Procambarus raneyi  H  H  H

【问题讨论】:

    标签: r list dataframe lapply


    【解决方案1】:

    我们需要将输出分配回list 或创建一个新对象。此外,在 OP 的代码中,该功能仅适用于第二列。我们可以遍历感兴趣的列并应用该函数,也可以单独执行

    lst <- lapply(lst, function(x) {x[2:4] <- lapply(x[2:4], sensitivity.rand, threshold = 25)
                     x})
    

    或者如果我们使用tidyverse,这可以使用mutate_each来完成

    lst <- lapply(lst, function(x) x %>%
                                     mutate_each(funs(sensitivity.rand(., 25)), 2:4))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2021-03-20
      • 2023-01-14
      • 2021-07-02
      相关资源
      最近更新 更多