R 为列表中的每个数据帧向函数传递不同的参数
以下是我的数据的简化示例: 我有一个数据帧列表R 为列表中的每个数据帧向函数传递不同的参数,r,lapply,R,Lapply,以下是我的数据的简化示例: 我有一个数据帧列表 set.seed(1) data1 <- data.frame(A = sample(1:10)) data2 <- data.frame(A = sample(1:10)) data3 <- data.frame(A = sample(1:10)) data4 <- data.frame(A = sample(1:10)) list1 <- list(data1, data2, data3, data4) 我想在l
set.seed(1)
data1 <- data.frame(A = sample(1:10))
data2 <- data.frame(A = sample(1:10))
data3 <- data.frame(A = sample(1:10))
data4 <- data.frame(A = sample(1:10))
list1 <- list(data1, data2, data3, data4)
我想在list1
中的每个数据帧中创建一个新列C
,其中:
C = A * (B/nrow(A))
由于B
的值来自data5
,因此B=10
用于list1
中的第一个数据帧(即data1
),而B=20
用于第二个数据帧data2
,依此类推
从我所读的内容来看,mapply
可能是解决方案,但我正在努力解决如何在list1
中的每个数据帧的所有行中指定单个值B
如有任何建议,我们将不胜感激 您需要使用
Map
在不同的向量上循环或并行列出:
Map(函数(df,B)转换(df,C=A*(B/nrow(df))),列表1,数据5$B)
#> [[1]]
#>A C
#> 1 8 8
#> 2 10 10
#> 3 1 1
#> 4 6 6
#> 5 7 7
#> 6 9 9
#> 7 3 3
#> 8 4 4
#> 9 2 2
#> 10 5 5
#>
#> [[2]]
#>A C
#> 1 10 20
#> 2 3 6
#> 3 2 4
#> 4 1 2
#> 5 9 18
#> 6 4 8
#> 7 6 12
#> 8 5 10
#> 9 8 16
#> 10 7 14
#>
#> [[3]]
#>A C
#> 1 5 15
#> 2 7 21
#> 3 1 3
#> 4 4 12
#> 5 2 6
#> 6 6 18
#> 7 10 30
#> 8 3 9
#> 9 8 24
#> 10 9 27
#>
#> [[4]]
#>A C
#> 1 3 12
#> 2 9 36
#> 3 6 24
#> 4 4 16
#> 5 2 8
#> 6 1 4
#> 7 10 40
#> 8 5 20
#> 9 7 28
#> 10 8 32
使用tidyverse可以更紧凑一些:
C = A * (B/nrow(A))
library(tidyverse)
map2(list1, data5$B, ~mutate(.x, C = A*(.y/nrow(.x))))