首页 > 解决方案 > 将数据框中的特定观察值与不同的值相乘

问题描述

我目前在 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)

谢谢指点!

标签: rdplyr

解决方案


您可以使用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))

推荐阅读