r - R 在 purrr::map 中使用 dplyr::mutate() 而不复制行
问题描述
这是数据:
library(tidyverse)
col_pre <- c('a', 'b', 'c')
df <- tibble(a1 = 1:3, a2 = 4:6, b1 = 7:9, b2 = 10:12, c1 = 13:15, c2 = 16:18)
我想使用purrr::map()
并dplyr::mutate()
创建三个新列,它们是df
. 我可以map()
用来迭代 a、b、c 列前缀的向量。我弄清楚了这些tidyeval
操作,以便下面的代码可以正常运行。
out <- col_pre %>%
map_df(~ df %>%
mutate(!!as.name(paste0(.x, '3')) := !!as.name(paste0(.x, '1')) + !!as.name(paste0(.x, '2')))
)
但是,out
现在有六个虚假行:
a1 a2 b1 b2 c1 c2 a3 b3 c3
1 1 4 7 10 13 16 5 NA NA
2 2 5 8 11 14 17 7 NA NA
3 3 6 9 12 15 18 9 NA NA
4 1 4 7 10 13 16 NA 17 NA
5 2 5 8 11 14 17 NA 19 NA
6 3 6 9 12 15 18 NA 21 NA
7 1 4 7 10 13 16 NA NA 29
8 2 5 8 11 14 17 NA NA 31
9 3 6 9 12 15 18 NA NA 33
它所做的是不必要地复制 input 的三行df
。
这是我想要的输出:
a1 a2 b1 b2 c1 c2 a3 b3 c3
1 1 4 7 10 13 16 5 17 29
2 2 5 8 11 14 17 7 19 31
3 3 6 9 12 15 18 9 21 33
我有一种感觉purrr::reduce()
可能是解决方案,但我不确定如何应用它。
任何帮助表示赞赏!
解决方案
推荐阅读
- python-3.x - Q:如何在celery worker_ready后台运行一个耗时的任务
- python - django-celery-beat 是否处理由网络服务器创建的多个 django 进程实例
- java - Selenium 中的数据提供程序与 TestNG 和 Java 不匹配
- c++ - 一直在监听 UDP 服务器
- flutter - 在颤振中使用 agora_rtc_engine 4.0.6 进行视频通话的黑屏
- api-gateway - 大使 API 密钥管理
- javascript - INDEXEDDB 更新/放置未返回预期状态的更新对象
- visual-studio-code - 如何在 Visual Studio 代码中编辑 jupyter 笔记本单元格的标签?
- python - discord.py 命令组中的子命令是否继承父命令的装饰器?
- c++ - 我的代码在标准输入中显示 4(Coreect),在 USACO 分级机中显示 5645,在 scanf/printf 中显示 1862013874。问题是什么?