![](/img/trans.png)
[英]R: create a new column based on multiple conditions of two columns with dates
[英]Create a new column based on multiple conditions of one string column in R
我有一个数据集如下:
df <- structure(list(city = structure(c(1L, 5L, 6L, 2L, 4L, 7L, 9L,
8L, 3L), .Label = c("bj", "cq", "cs", "nj", "sh", "tj", "wh",
"xa", "xm"), class = "factor"), area = c(1580.86, 1927.95, 532.24,
613.09, 1459.86, 1024.58, 684.63, NA, 708.35), price = c(9.51,
94.42, 10.77, 8.58, 38.07, 94.14, 30.43, 45.73, 41.39)), class = "data.frame", row.names = c(NA,
-9L))
现在我想根据以下条件创建一个新的列level
:
对于bj
和sh
, level
的值为a
; 对于cq
和tj
, level
的值为b
; 对于其他城市,值为c
。
我怎么能在 R 中做到这一点? 谢谢。
使用dplyr::case_when
和stringr::str_detect
你可以这样做:
library(dplyr)
library(stringr)
df %>%
mutate(level = case_when(str_detect(city, "bj|sh" ) ~ "a",
str_detect(city, "cq|tj" ) ~ "b",
TRUE ~ "c"))
#> city area price level
#> 1 bj 1580.86 9.51 a
#> 2 sh 1927.95 94.42 a
#> 3 tj 532.24 10.77 b
#> 4 cq 613.09 8.58 b
#> 5 nj 1459.86 38.07 c
#> 6 wh 1024.58 94.14 c
#> 7 xm 684.63 30.43 c
#> 8 xa NA 45.73 c
#> 9 cs 708.35 41.39 c
由代表 package (v0.3.0) 于 2020 年 6 月 26 日创建
library(tidyverse)
df %>% mutate(level = ifelse(city %in% c("bj", "sh"), "a",
ifelse(city %in% c("cq", "tj"), "b", "c")))
city area price level
1 bj 1580.86 9.51 a
2 sh 1927.95 94.42 a
3 tj 532.24 10.77 b
4 cq 613.09 8.58 b
5 nj 1459.86 38.07 c
6 wh 1024.58 94.14 c
7 xm 684.63 30.43 c
8 xa NA 45.73 c
9 cs 708.35 41.39 c
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.