假设我有以下Db:
if (word.indexOf(guessChar) == -1) { //if guessChar is not present in the word...
基本上我想要的是:
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
其实我想要的方式:
paste(db$sal1,db$sal2,db$sal3, sep="-")
para sal1 sal2 sal3 sal4 newcol
1 8 105.11 101.38 100.01 a 105.11-101.38-100.01
2 2 109.55 88.98 104.12 b 109.55-88.98-104.12
3 25 100.12 103.84 102.43 a 100.12-103.84-102.43
4 15 105.22 90.95 100.67 b 105.22-90.95-100.67
5 21 97.57 97.78 103.89 a 97.57-97.78-103.89
6 -1 101.88 100.22 88.21 b 101.88-100.22-88.21
7 12 104.20 95.26 93.72 a 104.2-95.26-93.72
8 16 106.25 100.70 94.95 b 106.25-100.7-94.95
9 24 101.36 97.91 99.67 a 101.36-97.91-99.67
使用变量colnam<-c("sal1","sal2","sal3")
colnameful<-paste0("db$",colnam)
我试过以下的事情:
colnameful
请建议,提前致谢。
答案 0 :(得分:4)
可能是这样的:
colnam<-c("sal1","sal2","sal3")
db[[paste(colnam,collapse = "-")]] <- with(db,paste(sal1,sal2,sal3,sep = "-"))
...虽然您可能会在将round
等值粘贴在一起之前发现sal1
with()
。
如果您只在字符向量中包含列,则可以尝试此而不是do.call(paste,c(db[,colnam],sep = "-"))
段:
├─ app.py
├─ project
| ├─ __init__.py
| └─ static
| └─ typescript
| └─ app.ts
└─ typings
├─ globals
| └─ ... # multiple imported ts libraries
└─ index.d.ts
答案 1 :(得分:0)
编辑:
感谢@joran和@Gregor(来自评论),他们帮助我理解使用eval(parse(text = ''))
不是一个好习惯。我写的功能也不必要地过于复杂。所以我们发现只有一个loop
(apply
)
apply(db[colnam], 1, paste, collapse = "-")
原始答案:
根据显示的输出,您似乎想要将sal1
,sal2
和sal3
粘贴在一起,但使用colnam
colnam<-c("sal1","sal2","sal3")
您可以在eval(parse(
中使用sapply
组合获取值,然后apply
逐行计算到paste
列
apply(sapply(paste0("db$",colnam), function(x) eval(parse(text = x))), 1,
function(x) paste(x, collapse = "-"))