R语言 Mutate和if else函数创建新列

z9smfwbn  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(134)

这可能是一个非常简单的问题,但到目前为止我失败了。
我的数据集看起来像这样
| 单位| Unit |
| --| ------------ |
| 日| day |
| 月|月| month |
| 周| weeks |
我想做的是创建一个新的列的天数取决于单位。所以3个月应该是90天,5周应该是35天。如果单位是天,天的值应该放在我的新列中,不需要任何计算。
所以结果应该是这样的
| 单位|持续时间_计算| Duration_calculated |
| --|--| ------------ |
| 日|1| 1 |
| 月|月|九十| 90 |
| 周|三十五| 35 |
以下是示例数据集

Duration <- c(1,3,5)    
Unit <- c("day", "month", "weeks")     
dataset <- data.frame(Duration, Unit)

字符串
我试过mutate和if else函数的组合,但对我来说没有效果。

vshtjzan

vshtjzan1#

创建查找向量,然后匹配:

dataset <- data.frame(Duration = c(1, 3, 5),
                      Unit = c("day", "month", "week"))

lookup <- setNames(c(1, 7, 30.437), c("day", "week", "month"))

dataset$Duration_calculated <- dataset$Duration * lookup[ dataset$Unit ]

dataset
#   Duration  Unit Duration_calculated
# 1        1   day               1.000
# 2        3 month              91.311
# 3        5  week              35.000

字符串

pdtvr36n

pdtvr36n2#

我们可以使用case_when()

library(dplyr)

df %>%
  mutate(Duration_calculated = case_when(
    Unit == "day" ~ Duration,
    Unit == "month" ~ Duration * 30,
    Unit == "weeks" ~ Duration * 7
  ))

  Duration  Unit Duration_calculated
1        1   day                   1
2        3 month                  90
3        5 weeks                  35

字符串
或者,如果你坚持使用ifelseif_else,我们可以使用嵌套的if_else()语句:

df %>% 
  mutate(Duration_calculated = if_else(
  Unit == "day", Duration,
  if_else(Unit == "month", Duration * 30,
          if_else(Unit == "weeks", Duration * 7, NA_real_)
  )
))

相关问题