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 = "-"))