我有以下数据,其中Duration记录了每个家庭在同一所房子中的年数。 输入df:
House_ID Duration
H29937 30 YEAR
H2996 30 YEAR
H156 25 YEAR
H10007 5 MONTH
我正尝试通过以下查询获取以月为单位的持续时间:如果提取的字符串的第二部分是YEAR,则将其乘以12,将持续时间中的数字转换为月。 否则,只取持续时间的数字部分
info_df <- mutate(info_df,
residence_Months = ifelse(str_split(Duration," ",2)[[1]][2] == "YEAR",
as.numeric(str_split(Duration," ",2)[[1]][1])*12,
as.numeric(str_split(Duration," ",2)[[1]][1])))
预期输出df:
Agent_Code Duration Residence_Months
S1299317 30 YEAR 360
S1299622 30 YEAR 360
S1299656 25 YEAR 300
S1300067 5 MONTH 5
但是,上面的代码为所有行提供了与360相同的值。
我不确定错误发生在哪里。有人可以帮我吗?
注意:我已经尝试了其他帖子中指出的按行选项,但无济于事。
答案 0 :(得分:2)
根据您的完整数据集,使用lubridate
包可能会更好地实现,但是考虑到您的示例,您可以执行以下操作:
library(dplyr)
library(tidyr)
df <- tibble(House_ID = c("H29937", "H2996", "H156", "H10007"),
Duration = c("30 YEAR", "30 YEAR", "25 YEAR", "5 MONTH"))
df %>%
separate("Duration", c("duration", "unit")) %>%
mutate(duration = as.integer(duration),
Residence_Months = ifelse(unit == "YEAR", duration * 12, duration))
#> # A tibble: 4 x 4
#> House_ID duration unit Residence_Months
#> <chr> <int> <chr> <dbl>
#> 1 H29937 30 YEAR 360
#> 2 H2996 30 YEAR 360
#> 3 H156 25 YEAR 300
#> 4 H10007 5 MONTH 5
由reprex package(v0.3.0)于2019-07-18创建