繁体   English   中英

根据R中一个字符串列的多个条件创建一个新列

[英]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

对于bjshlevel的值为a 对于cqtjlevel的值为b 对于其他城市,值为c

我怎么能在 R 中做到这一点? 谢谢。

使用dplyr::case_whenstringr::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM