在R中的列表中循环 Dataframe 的特定列

xxls0lw8  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(133)

我想用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")

尝试将for循环/sapply嵌入到lapply中,但似乎无法找到一种方法,仅从向量中挑选与数据集名称相同的变量。
如果任何澄清是需要或额外的代码,请让我知道!
先谢了!

c6ubokkw

c6ubokkw1#

使用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

相关问题