R-数据框列表-计算并添加新行

use*_*607 3 r list

我有以下数据框列表

d1 <- data.frame(var1 = 10, var2 = 20, var3 = 30)
d2 <- data.frame(var4 = 40, var5 = 50, var6 = 60)
my.list <- list(d1, d2)

> my.list
[[1]]
    var1 var2 var3
  1   10   20   30

[[2]]
    var4 var5 var6
  1   40   50   60
Run Code Online (Sandbox Code Playgroud)

现在,我想向每个包含以下内容的数据框添加新行:

values <- c(0.75, 0.5, 0.25)

d1$var1 * values[1] #new second row d1
d1$var1 * values[2] #new third row d1
d1$var1 * values[3] #new fourth row d1
Run Code Online (Sandbox Code Playgroud)

需要对每个数据帧中的所有$ var变量以及列表中的所有数据帧进行此操作。

新的d1看起来像这样:

    var1 var2 var3
  1   10   20   30
  2  7.5   15 22.5
  3    5   10   15
  4  2.5    5  7.5
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

akr*_*run 5

一种选择是遍历list并将每列与“值”向量相乘,rbind并将原始数据行与新行相乘

lapply(my.list, function(x) rbind(x, sapply(x, `*`, values)))
#[[1]]
#  var1 var2 var3
#1 10.0   20 30.0
#2  7.5   15 22.5
#3  5.0   10 15.0
#4  2.5    5  7.5

#[[2]]
#  var4 var5 var6
#1   40 50.0   60
#2   30 37.5   45
#3   20 25.0   30
#4   10 12.5   15
Run Code Online (Sandbox Code Playgroud)

tidyverse使用add_row和的选项map

library(tidyverse)
map(my.list, ~  .x %>%
                add_row(!!! map(., `*`, values)))
#[[1]]
#  var1 var2 var3
#1 10.0   20 30.0
#2  7.5   15 22.5
#3  5.0   10 15.0
#4  2.5    5  7.5

#[[2]]
#  var4 var5 var6
#1   40 50.0   60
#2   30 37.5   45
#3   20 25.0   30
#4   10 12.5   15
Run Code Online (Sandbox Code Playgroud)