繁体   English   中英

在不使用 r 中的列表的情况下循环遍历数据帧

[英]Looping over dataframes WITHOUT using list in r

我正在导入数百个需要清理列名的文本文件。

t1 <- data.frame("A")
t2 <- data.frame(2)
names(t1) <- "COL one"
names(t2) <- "Col two"

我可以将其强制转换为列表并进行重叠,但随后我需要加入数据帧,并且不想加入列表。

f <- list(t1=t1,t2=t2)
f2 <- lapply(f,janitor::clean_names)
  1. 有没有一种方法可以用来循环遍历数据帧、应用函数并返回单个数据帧?
  2. 我可以以某种方式将 f2 列表强制回数据帧 t1 和 t2 吗?

只是为了好奇:

dataframe_names <- c('t1', 't2')
#OR if you have more dataframes
#dataframe_names <- ls(pattern = '^t\\d+')

for (i in dataframe_names) {
   assign(i, janitor::clean_names(get(i)))
}

t1
#  col_one
#1       A

t2
#  col_two
#1       2

您可以使用eval(parse(text=))来这样做,但它需要您的环境只有这些 data.frames。 然后,您可以将“NULL”替换为您想要为列命名的任何内容

我认为您可以将这些数据帧存储在特定环境中并在单独的空间中运行,但我还没有尝试过。

t1 <- data.frame("A")
t2 <- data.frame(2)
names(t1) <- "COL one"
names(t2) <- "Col two"

l = ls() 
# note : you can also precise what you want in this vector of course, like so:
# l <- c('t1', 't2')

for(i in l){
  eval(parse(text = paste0('colnames(',i,')=NULL')))
}

t2
#   
# 1 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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