r - 用 purrr 创建新变量(怎么做?)
问题描述
我有一个大型数据集,有一堆列,我想根据前缀或后缀在这些列上运行相同的函数,以创建一个新变量。
我想做的是提供一个映射列表,并创建新变量。
dataframe <- data_frame(x_1 = c(1,2,3,4,5,6),
x_2 = c(1,1,1,2,2,2),
y_1 = c(200,400,120,300,100,100),
y_2 = c(250,500,150,240,140,400))
newframe <- dataframe %>% mutate(x_ratio = x_1/x_2,
y_ratio = y_1/y_2)
过去,我在字符串中编写了类似的代码
code <- "df <- df %>% mutate(#_ratio = #_1/#_2)" %>% str_replace_all("#",c("x","y"))
eval(parse(text=code)))
是否有可能使用以下内容: newframe <- dataframe %>% map(c("x","y"), mutate( paste0(.x,"_ratio)=paste0(.x,"_1/" ,.x,"_2))
解决方案
如果我们想使用map
,那么一种选择是split
按列名对数据集进行划分,然后除以reduce
library(tidyverse)
split.default(dataframe, sub("_\\d+", "", names(dataframe))) %>%
map_df(., reduce, `/`) %>%
rename_all(~ paste0(.x, "_ratio")) %>%
bind_cols(dataframe, .)
推荐阅读
- sql - 是否可以从 Access 到 QuickBooks 逐行发送信息?
- c++ - 为什么 static_cast 不使用转换运算符来指向 const 的指针?
- java - 如何在屏幕中心创建一个透明的弯曲透明矩形?
- go - 尽管我使用的是界面,但如何解决导入周期不允许的问题?
- c# - UnitOfWork 与存储库和实体框架
- laravel - Laravel 为急切的加载关系获取排序结果
- elasticsearch - elasticsearch加权随机分布
- java - Java - 复制从数据库中检索到的列表的一部分
- python - 使用 NumPy 数组到 tf.data.Dataset
- javascript - React Native 模态样式