我有一个这样的数据框:
test<-data.frame(year=c(1,2,3),cyl_ring=c(4,3,2),gear_ring=c(1,1,1),wheel_ring=c(1,2,2))#correct typo:change `,` to `=`
我希望制作一个新的数据集&#34; test2 &#34;包含测试以及测试中名称以&#34结尾的每一列; ring&#34;我希望制作新的列,我用另一个后缀将其名称更改为同名,例如&#34; rang&#34;,然后乘以0.5
新数据:
test<-data.frame(year=c(1,2,3),cyl_ring=c(4,3,2),gear_ring=c(1,1,1),wheel_ring=c(1,2,2),cyl_rang=c(2,1.5,1),gear_rang=c(0.5,0.5,0.5),wheel_rang=c(0.5,1,1))
答案 0 :(得分:1)
以dplyr
方式执行此操作:
library(dplyr)
library(stringr)
test<-data.frame(year=c(1,2,3),cyl_ring=c(4,3,2),gear_ring=c(1,1,1),wheel_ring=c(1,2,2))
test %>%
mutate_at(vars(ends_with("ring")),funs("new" = . * 0.5)) %>% #dplyr can also add suffix to variable name while using this syntax
rename_at(vars(ends_with("ring_new")),~str_replace(.x,"ring_new","rang"))
唯一的问题是,我不知道dplyr
如何能够同时变异和重命名(不只是添加后缀,而是更改变量名称)多个变量。所以我需要两行来完成它。
> test %>%
+ mutate_at(vars(ends_with("ring")),funs("new" = . * 0.5))
year cyl_ring gear_ring wheel_ring cyl_ring_new gear_ring_new wheel_ring_new
1 1 4 1 1 2.0 0.5 0.5
2 2 3 1 2 1.5 0.5 1.0
3 3 2 1 2 1.0 0.5 1.0
> test %>%
+ mutate_at(vars(ends_with("ring")),funs("new" = . * 0.5)) %>%
+ rename_at(vars(ends_with("ring_new")),~str_replace(.x,"ring_new","rang"))
year cyl_ring gear_ring wheel_ring cyl_rang gear_rang wheel_rang
1 1 4 1 1 2.0 0.5 0.5
2 2 3 1 2 1.5 0.5 1.0
3 3 2 1 2 1.0 0.5 1.0
答案 1 :(得分:0)
到目前为止我自己的解决方案:
tmp=test[grep("^.*ring",colnames(test),perl=TRUE)]*0.5
colnames(tmp) <- gsub("(^.*)ring","\\1rang",colnames(tmp))
test2<-cbind(test,tmp)