我正在尝试在R中编写一个循环,该循环将在多个数据帧中选择相同的特定列名称。下面的代码似乎实现了所需的输出,但是未重新分配数据帧。如何将数据帧df1和df2重新分配给lapply输出?
col1 <- c(1,2,3,4)
col2 <- c("A","B","C","D")
col3 <- c(4,15,"BLANK","ZZ")
df1 <- data.frame(col1,col2, col3)
col1 <- c(500,546,47,87)
col2 <- c("E","L","J","U")
col3 <- c(6,10,"F","R")
df2 <- data.frame(col1,col2, col3)
df_list <- list(df1,df2)
lapply(df_list,function(x) {x<- x %>% select("col1","col2")} )
我们可以使用namedlist
然后使用withlist2env
来更新全局环境中的对象(但是,最好将其保留在中list
)
list2env(setNames(lapply(df_list, `[`, c("col1", "col2")),
c("df1", "df2")), .GlobalEnv)
df1
# col1 col2
#1 1 A
#2 2 B
#3 3 C
#4 4 D
df2
# col1 col2
#1 500 E
#2 546 L
#3 47 J
#4 87 U
不用指定创建'df_list' list(df1, df2)
,我们可以使用mget
df_list <- mget(ls(pattern= "^df\\d+$"))
然后,它更容易
list2env(lapply(df_list, `[`, c("col1", "col2")), .GlobalEnv)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句