繁体   English   中英

循环遍历 R 中列表中数据帧的特定列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM