r - 将数据框中的特定观察值与不同的值相乘
问题描述
我目前在 R 中有一个 df,格式如下:
Observation Count
PSEMEN 289
PSEMEN 289
PSEMEN 289
ABIPRO 18
ABIPRO 18
PSEMEN 289
PSEMEN 289
TSUMER 195
TSUHET 1
ABIPRO 18
我需要创建一个名为 Value 的新列,并将特定观察值(即 TSUHET 和 ABIPRO)乘以 70%,其他所有值乘以 30%。我不太确定如何执行此操作,但我正在考虑的方法类似于:
mutate(Value = If TSUHET OR ABIPRO then * .70
else everything else *.30)
谢谢指点!
解决方案
您可以使用if_else
:
library(dplyr)
df %>%
mutate(Value = Count * if_else(Observation %in% c('TSUHET', 'ABIPRO'), 0.7, 0.3))
# Observation Count Value
#1 PSEMEN 289 86.7
#2 PSEMEN 289 86.7
#3 PSEMEN 289 86.7
#4 ABIPRO 18 12.6
#5 ABIPRO 18 12.6
#6 PSEMEN 289 86.7
#7 PSEMEN 289 86.7
#8 TSUMER 195 58.5
#9 TSUHET 1 0.7
#10 ABIPRO 18 12.6
或在基础 R 中:
transform(df,Value = Count * ifelse(Observation %in% c('TSUHET', 'ABIPRO'), 0.7, 0.3))
如果您要比较多个值,那么您可以使用case_when
哪个更清晰
df %>%
mutate(Value = Count * case_when(Observation %in% c('TSUHET', 'ABIPRO')~0.7,
Observation == 'PINMON' ~0.1,
TRUE ~ 0.3))
推荐阅读
- .net - ElasticSearch - NEST 搜索部分字符串多重匹配
- csv - CSV & Lgstash & Elasticsearch
- python-3.x - Tic Tac Toe AI 错误请帮我修复它
- ruby - Rails 测试命令在新项目上失败
- android - GeneXus 离线 SD 原生 android 应用程序未同步
- java - 尝试连接到android上的网络后如何添加结果监听器?
- php - PHP MySQL显示一行是否不存在
- amazon-web-services - 我是否仍需要为 AWS ALB 下的所有 NGINX 入口配置 TLS/SSL
- iis - Windows 服务器未收到请求
- selenium - Lambda 上的 Selenium 和 Chromedriver - 大规模不一致