R 如何使用对象中的列名粘贴?

R 如何使用对象中的列名粘贴?,r,paste,R,Paste,假设我有以下数据库: db<-data.frame(para=c(round(rnorm(20,10,10),0)),sal1=c(rnorm(20,100,7)),sal2=c(rnorm(20,100,7)),sal3=c(rnorm(10,100,7)),sal4=rep(c("a","b"),5)) para sal1 sal2 sal3 sal4 1 13 104.73988 96.53538 107.03285 a 2

假设我有以下数据库:

db<-data.frame(para=c(round(rnorm(20,10,10),0)),sal1=c(rnorm(20,100,7)),sal2=c(rnorm(20,100,7)),sal3=c(rnorm(10,100,7)),sal4=rep(c("a","b"),5))

para      sal1      sal2      sal3     sal4
1    13 104.73988  96.53538 107.03285    a
2     1  94.54826  88.79930 101.17248    b
3    26 102.36344  94.83702  91.11708    a
4    13  99.32913  95.90670  90.49470    b
实际上我想要的方式:

colnam<-c("sal1","sal2","sal3")
colnameful<-paste0("db$",colnam)
请提前提出建议,谢谢。

可能类似于:

colnam<-c("sal1","sal2","sal3")
db[[paste(colnam,collapse = "-")]] <- with(db,paste(sal1,sal2,sal3,sep = "-"))
可能是这样的:

colnam<-c("sal1","sal2","sal3")
db[[paste(colnam,collapse = "-")]] <- with(db,paste(sal1,sal2,sal3,sep = "-"))

编辑:

感谢@joran和@Gregor(从评论中)帮助我理解使用
eval(parse(text='')
不是一种好的做法。我写的函数也不必要地过于复杂。因此,我们找到了一个简单的解决方案,只需一个
循环
应用

原始答案:

根据显示的输出,您似乎希望将
sal1
sal2
sal3
粘贴在一起,但使用
colnam

colnam<-c("sal1","sal2","sal3")

编辑:

感谢@joran和@Gregor(从评论中)帮助我理解使用
eval(parse(text='')
不是一种好的做法。我写的函数也不必要地过于复杂。因此,我们找到了一个简单的解决方案,只需一个
循环
应用

原始答案:

根据显示的输出,您似乎希望将
sal1
sal2
sal3
粘贴在一起,但使用
colnam

colnam<-c("sal1","sal2","sal3")


colnam
不应该是
c(“sal1”、“sal2”、“sal3”)
?哦,是的,谢谢你的注意
colnam
不应该是
c(“sal1”、“sal2”、“sal3”)
?哦,是的,谢谢你的注意,直到你需要用(db,paste(sal1,sal2,sal3,sep=“-”)编写
我的对象中只有100个列,实际数据库中只有100个列。@AbhijeetArora您可能可以执行
do.call(粘贴,c(db[,colnam],sep=“-”))
如果需要的话。这正是我想要的。。谢谢。。你能在答案中编辑这个,这样我就可以接受答案了吗?你仍然需要用(db,paste(sal1,sal2,sal3,sep=“-”)写
我在对象中有这个,实际db中只有100列。@AbhijeetArora你可能可以做
do.call(paste,c(db[,colnam],sep=“-”)
如果需要的话。这正是我想要的。。谢谢。。你能在答案中编辑一下吗,这样我就可以接受答案了?仅供参考,几乎任何推荐
eval(parse(text=…)
的东西都会遭到否决票,因为它被广泛而强烈地劝阻。否。不是你!只是想弄清楚这里可能出了什么问题。@joran以及为什么不鼓励这样做?而且,按行应用
粘贴似乎效率低下。也许我误解了(我不确定我是否理解OP之后的结果),但它似乎是故意采用矢量化函数并取消矢量化。对于一些讨论,您可以开始。仅供参考,几乎任何建议
eval(parse(text=…)
的内容都会遭到否决,因为它被广泛而强烈地劝阻。不是你!只是想弄清楚这里可能出了什么问题。@joran以及为什么不鼓励这样做?而且,按行应用
粘贴似乎效率低下。也许我有点误解(我不确定我是否理解OP之后的结果),但它似乎是故意采用向量化函数并取消向量化。对于一些讨论,您可以开始。
apply(db[colnam], 1, paste, collapse = "-") 
colnam<-c("sal1","sal2","sal3")
apply(sapply(paste0("db$",colnam), function(x) eval(parse(text = x))), 1,
                            function(x) paste(x, collapse = "-"))