r - 如果使用 case_when,则对两个或更多列进行变异
问题描述
我正在尝试将case_when
函数用于一堆列 ya data.frame。
这种情况下不返回指定的列mutate
cars %>% mutate (
km = speed * dist,
mt = km / 1000
) %>%
mutate (
.funs = case_when(
(speed < 20 ) ~ {
km = km * 2
mt = mt * 3
}
)
)
谢谢
解决方案
我们可以使用mutate_at
library(tidyverse)
cars %>%
mutate(km = speed * dist, mt = km/1000) %>%
mutate_at(vars(km, mt), funs(case_when(speed < 20 ~ .*2,
TRUE ~ .)))
如果我们需要为每一列使用单独的值进行计算,则使用map2
或pmap
out <- cars %>%
mutate(km = speed * dist, mt = km/1000) %>%
select(km, mt) %>%
map2_df(., list(2, 3), ~
case_when(cars$speed < 20 ~ .x * .y, TRUE ~ .x)) %>%
bind_cols(cars, .)
head(out)
# speed dist km mt
#1 4 2 16 0.024
#2 4 10 80 0.120
#3 7 4 56 0.084
#4 7 22 308 0.462
#5 8 16 256 0.384
#6 9 10 180 0.270
推荐阅读
- haskell - 如何结合二元和一元函数来获得折叠的阶跃函数?
- java - 如何为linkedList中的每个节点或数据存储/生成整数ID?
- reactjs - 与状态问题的 Antd 组件模态表单反应
- python - 运行类的每个方法后修改实例变量的最佳方法?
- dart - Dart - 如何将变量设置为一些特定选项的字符串类型?
- c# - 如何使用 Kestrel 对简单的 Web 服务进行复制并运行部署?
- arrays - 是否有一种有效的算法可以仅从字符串数组中提取包含特定子字符串的字符串?
- aws-lambda - 如何使用无服务器框架从 AWS Lambda 向 AppSync GraphQL API 发送查询请求?
- python - 遍历字符串的 xlsx 列以在 python 中进行比较和匹配
- jquery - jquery在加载页面之前替换html标签