通过dplyr mutate或purrr映射生成新列
我有数据帧通过dplyr mutate或purrr映射生成新列,r,dplyr,purrr,mutate,R,Dplyr,Purrr,Mutate,我有数据帧 set.seed(2021) data.frame(map(0:5, rnorm, n=10))%>% setNames(c('art_1','art_2','vl_1','vl_2','dg_1','dg_2')) art_1 art_2 vl_1 vl_2 dg_1 dg_2 1 -0.12245998 -0.08220485 1.0575567 1.036175 4.116389 4.499709 2
set.seed(2021)
data.frame(map(0:5, rnorm, n=10))%>%
setNames(c('art_1','art_2','vl_1','vl_2','dg_1','dg_2'))
art_1 art_2 vl_1 vl_2 dg_1 dg_2
1 -0.12245998 -0.08220485 1.0575567 1.036175 4.116389 4.499709
2 0.55245663 0.72717482 1.8143150 1.552056 5.760214 2.744131
3 0.34864950 1.18199540 0.8988754 4.019443 3.654884 5.043741
4 0.35963224 2.50854179 3.2081153 1.578583 6.120000 4.631182
5 0.89805369 2.60447011 0.3750615 2.395468 3.965623 4.039778
6 -1.92256952 -0.84147561 2.1053783 1.416526 3.207846 5.103766
7 0.26174436 2.62331021 0.5445567 1.714068 5.475515 5.427289
8 0.91556637 1.13138902 1.6459839 1.545315 3.274443 4.829518
9 0.01377194 2.48112247 1.9063000 2.912929 4.312379 3.450860
10 1.72996316 2.51331829 3.1006686 3.504736 4.691964 3.494400
我需要生成新的专栏“art”,“vl”,“dg”
art=art\u 1/art\u 2
vl=vl_1/vl_2
dg=dg_1/dg_2
不要手动操作
请用
dplyr非常简单地帮助我。您可以为此使用mutate
。我建议你做一个快速的dplyr
教程
library(dplyr)
df <- data.frame(map(0:5, rnorm, n=10))%>% setNames(c('art_1','art_2','vl_1','vl_2','dg_1','dg_2'))
df %>%
mutate(art = art_1 / art_2,
vl = vl_1 / vl_2,
dg = dg_1 / dg_2)
库(dplyr)
df%集合名(c('art_1'、'art_2'、'vl_1'、'vl_2'、'dg_1'、'dg_2'))
df%>%
变异(艺术=艺术1/艺术2,
vl=vl_1/vl_2,
dg=dg_1/dg_2)
这样就可以了。逐步解释-
- 在向量中存储不带前缀/后缀的不同变量名,例如
vars
- 使用跨
要传递变量名,请使用后缀\u 1
使用!!运算符以及glue::glue()
现在。lambda函数中的(.x)将充当这些变量
要更改后缀,请使用str\u replace
和get()
.name
参数遵循胶水规范。所以在这里只使用'{vars}'
你完了
vars%突变(跨越(!!glue::glue({vars}_1'),
~./get(str_replace(cur_column(),“1”,“2”)),
.names='{vars}'))
art_1 art_2 vl_1 vl_2 dg_1 dg_2 art vl dg
1 -0.12245998 -0.08220485 1.0575567 1.036175 4.116389 4.499709 1.489692871 1.0206354 0.9148122
2 0.55245663 0.72717482 1.8143150 1.552056 5.760214 2.744131 0.759730141 1.1689755 2.0991033
3 0.34864950 1.18199540 0.8988754 4.019443 3.654884 5.043741 0.294966886 0.2236318 0.7246374
4 0.35963224 2.50854179 3.2081153 1.578583 6.120000 4.631182 0.143363067 2.0322754 1.3214770
5 0.89805369 2.60447011 0.3750615 2.395468 3.965623 4.039778 0.344812439 0.1565713 0.9816438
6 -1.92256952 -0.84147561 2.1053783 1.416526 3.207846 5.103766 2.284759642 1.4862969 0.6285252
7 0.26174436 2.62331021 0.5445567 1.714068 5.475515 5.427289 0.099776368 0.3176985 1.0088859
8 0.91556637 1.13138902 1.6459839 1.545315 3.274443 4.829518 0.809240992 1.0651445 0.6780061
9 0.01377194 2.48112247 1.9063000 2.912929 4.312379 3.450860 0.005550689 0.6544272 1.2496535
10 1.72996316 2.51331829 3.1006686 3.504736 4.691964 3.494400 0.688318376 0.8847081 1.3427095
vielen Dank。你对我帮助很大。
vars <- c('art','vl','dg')
df %>% mutate(across(!!glue::glue('{vars}_1'),
~ . / get(str_replace(cur_column(), "1", "2")),
.names = '{vars}'))
art_1 art_2 vl_1 vl_2 dg_1 dg_2 art vl dg
1 -0.12245998 -0.08220485 1.0575567 1.036175 4.116389 4.499709 1.489692871 1.0206354 0.9148122
2 0.55245663 0.72717482 1.8143150 1.552056 5.760214 2.744131 0.759730141 1.1689755 2.0991033
3 0.34864950 1.18199540 0.8988754 4.019443 3.654884 5.043741 0.294966886 0.2236318 0.7246374
4 0.35963224 2.50854179 3.2081153 1.578583 6.120000 4.631182 0.143363067 2.0322754 1.3214770
5 0.89805369 2.60447011 0.3750615 2.395468 3.965623 4.039778 0.344812439 0.1565713 0.9816438
6 -1.92256952 -0.84147561 2.1053783 1.416526 3.207846 5.103766 2.284759642 1.4862969 0.6285252
7 0.26174436 2.62331021 0.5445567 1.714068 5.475515 5.427289 0.099776368 0.3176985 1.0088859
8 0.91556637 1.13138902 1.6459839 1.545315 3.274443 4.829518 0.809240992 1.0651445 0.6780061
9 0.01377194 2.48112247 1.9063000 2.912929 4.312379 3.450860 0.005550689 0.6544272 1.2496535
10 1.72996316 2.51331829 3.1006686 3.504736 4.691964 3.494400 0.688318376 0.8847081 1.3427095