我有10个(例如)数据处理程序,它们的名称类似于df1、df2、df3、.对于10列,我想给每一列中的第10列命名,比如dataframe名称( df1中的第10列必须有"df1“名称,df2 -- "df2”等等)
我试过这个
for (i in paste0("df",1:10)){
assign(names(get(i))[10],
value=i
)
}但是没有什么改变,我怎么能解决这个问题呢?
发布于 2016-01-29 12:37:05
你可以分三步完成:
--get
-改变colnames
-- assign
for (i in paste0("df",1:3)){
d=get(i)
colnames(d)[10]=i
assign(i,d)
}发布于 2016-01-29 12:46:53
如果命令是以字符串形式给出的,那么您可以通过eval(parse(text = command))实现它。
例如,这是可能的:
eval(parse(text = 'names(df1) <- "colname"'))为每个data.frame准备一组命令并不难。我觉得在你的情况下,
commands <- sprintf('names(df%d)[10] <- "df%d"', 1:10, 1:10)然后,
eval(parse(text = commands))发布于 2016-01-29 12:33:11
assign的文档说:
X变量名,作为字符串给出。
您尝试将它与变量名称以外的其他内容一起使用,而变量名称似乎不起作用。
我将您的问题简化为三个有三列的数据框架,以便更容易地创建示例数据。以下是数据框架:
df1 <- data.frame(a = 1:10, b = 1:10, c = 1:10)
df2 <- df1
df3 <- df1这是更改第三列名称的循环:
for (i in paste0("df",1:3)){
call <- bquote(names(.(as.name(i)))[3] <- i)
eval(call)
}我首先要做的是创建这个调用(您可以查看call,看看它是否包含实际要计算的代码行)。as.name(i)将字符i转换为变量名,.()告诉bquote将括号内的已知符号替换为它们的值。内部已知的符号是i,它将被"df1"替换,然后将字符串转换为符号。
一旦构造了调用,就会使用eval()对其进行评估。
https://stackoverflow.com/questions/35084427
复制相似问题