2016-04-26 120 views
-2

我试图通过从环附接的字符串来重命名几个变量重命名变量:在R中一个循环

df <- data.frame(net_low_mptc=1:3, net_medium_mptc=4:6, net_high_mptc=7:9) 
x<-c("low","medium","high") 


for(lvl in x) { 
rename(df, c(sprintf("net_%s_mptc", lvl) = sprintf("bill_%s_F", lvl))) } 

该错误是由sprintf的表达引起的:

Error: unexpected '=' in: 
"for(lvl in x) { 
rename(df, c(sprintf("net_%s_mptc", lvl) =" 
+3

[?如何使一个伟大的[R重复的例子(http://stackoverflow.com/questions/5963269)也许使用'dplyr :: rename_'? – zx8754

+0

抱歉,我没有按照这个... – Sassafras

+0

添加'dput(head(df_1))'到你的文章,所以我们可以重现相同的数据。 – zx8754

回答

1

我猜这就是他/她正试图做的事:

library(plyr) 

x <- c("low","medium","high") 

for(lvl in x) { 
    df_1 <- rename(df_1, setNames(sprintf("bill_tdcv_%s_F", lvl), sprintf("bill_no_net_tdcv_%s", lvl))) 
} 
+0

谢谢,这工作! – Sassafras

2

编辑:

colnames(df) <- sub("net_", "bill_", colnames(df)) 
colnames(df) <- sub("_mptc", "_F", colnames(df)) 

colnames(df) 
# [1] "bill_low_F" "bill_medium_F" "bill_high_F" 

我猜这里,也许试试这个:

x <- c("low", "medium", "high") 
colnames(df_1)[colnames(df_1) %in% paste0("bill_no_net_tdcv_", x)] <- 
    paste0("bill_tdcv_", x, "_F") 

如果使用正则表达式解决方案,请提供您的数据。

+1

如果姓名的排列顺序不是x,你可能会得到一些意想不到的结果(例如,你冒着用'low'替换'high'的东西] – Cath

+0

@Cath很好的结果,我们将等待OP到更新数据... – zx8754

+1

done ;-),可能是'colnames(df)< - sub(paste0(“net_(”,paste(x,collapse =“|”),“)_mptc”),“bill _ \\ 1_F“,colnames(df))'会做到这一点 – Cath