[英]Looping over specific columns of dataframes in a list in R
我想使用lapply
循环遍历列表中的不同数据集,并在列表的每个项目中遍历列,但只有那些保存在名为vector_test
的向量中的数据集。 我喜欢将这些变量居中,所以基本上减去每个数据集中循环通过的每个变量的加权平均值。
假设我将以下 3 个数据集保存在列表中:
df1<-data.frame(v1=c(1,2,3,4,5,6,7),
v2=c(9,8,7,6,5,4,3),
v3=c(4,5,6,7,4,4,3),
v4=c(5,6,4,5,6,5,6))
df2<-data.frame(v1=c(1,5,3,4,9,6,7),
diff_var=c(1,3,4,6,2,3,4),
v2=c(9,8,2,6,3,4,3),
v3=c(4,5,6,7,3,4,3),
v4=c(5,2,4,4,6,1,6))
df3<-data.frame(v1=c(1,5,8,4,2,6,1),
v2=c(1,8,1,6,2,4,7),
v3=c(1,5,2,5,3,4,3),
v4=c(5,9,4,5,6,2,6))
test_liste<-list(df1,df2,df3)
此外,我将变量名称保存在向量中:
vector_test<-c("v3","v4")
尝试在lapply
中嵌入一个for
循环/ sapply
,但似乎无法找到一种方法来仅从向量中选择与数据集相比具有相同名称的变量。
如果需要任何说明或其他代码,请告诉我!
提前致谢!
使用lapply
你可以这样做:
lapply(test_liste, function(x) {
x[vector_test] <- lapply(x[vector_test], function(x) x - mean(x))
x
})
#> [[1]]
#> v1 v2 v3 v4
#> 1 1 9 -0.7142857 -0.2857143
#> 2 2 8 0.2857143 0.7142857
#> 3 3 7 1.2857143 -1.2857143
#> 4 4 6 2.2857143 -0.2857143
#> 5 5 5 -0.7142857 0.7142857
#> 6 6 4 -0.7142857 -0.2857143
#> 7 7 3 -1.7142857 0.7142857
#>
#> [[2]]
#> v1 diff_var v2 v3 v4
#> 1 1 1 9 -0.5714286 1
#> 2 5 3 8 0.4285714 -2
#> 3 3 4 2 1.4285714 0
#> 4 4 6 6 2.4285714 0
#> 5 9 2 3 -1.5714286 2
#> 6 6 3 4 -0.5714286 -3
#> 7 7 4 3 -1.5714286 2
#>
#> [[3]]
#> v1 v2 v3 v4
#> 1 1 1 -2.2857143 -0.2857143
#> 2 5 8 1.7142857 3.7142857
#> 3 8 1 -1.2857143 -1.2857143
#> 4 4 6 1.7142857 -0.2857143
#> 5 2 2 -0.2857143 0.7142857
#> 6 6 4 0.7142857 -3.2857143
#> 7 1 7 -0.2857143 0.7142857
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.