【问题标题】:How to run function on each row of a dataframe, while using multiple arguments from that dataframe, and outputting new dataframes in a list如何在数据帧的每一行上运行函数,同时使用该数据帧中的多个参数,并在列表中输出新的数据帧
【发布时间】:2021-11-02 00:03:00
【问题描述】:

假设我从一个数据框开始。我想对每一行执行一个功能。该函数将行的多列作为参数。我希望最终结果是一个数据框列表,其中每个数据框对应于原始数据框的一行。我怎样才能做到这一点?我对apply 中的各种apply 函数和其他一些函数感到困惑。

这是一个例子:

我从这个数据框开始:

a <- data.frame(a= c(1,2), b=c(2,3), c=c(0,0))

我想执行一个简单地添加列 a、b 和 c 的函数。输出是结果,其中每一行的总和都包含在数据框中。数据框的名称应与行号相对应。

b <- list(r1=data.frame(3), r2=data.frame(5))

【问题讨论】:

    标签: r function dplyr lapply


    【解决方案1】:

    您可以尝试首先使用 mutate 创建您的 now 变量,然后使用 row_number 索引创建 split 您的 data.frame。

    library(dplyr)
    
    a %>% mutate(sum_of_rows=rowSums(.)) %>%
          split(1:nrow(a)) %>%
          setNames(paste0('r', 1:nrow(a))
    

    如果您希望列表中的每个元素都有一整行的 data.frame,这将起作用。

    如果您只想要一个包含单个元素的 data.frames 列表,如您的示例所示,您可以简单地使用:

    rowSums(a) %>%
    as.data.frame() %>%
    split(1:nrow(.)) %>%
    setNames(paste0('r', 1:nrow(a))
    

    或者只使用一些基本的 R:

    setNames(split(as.data.frame(rowSums(a)), 1:nrow(a)), paste0('r', 1:nrow(a))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-29
      • 2018-05-03
      • 2021-07-25
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多