根据条件创建新列

时间:2020-08-09 10:43:24

标签: r

我有23列数字,但是我只对一个数字感兴趣,而其他数字将被编码为“否”。如果该列包含数字3,它将被编码为“是”,而其他数字将为“否”。我该如何实现? 演示用df。 谢谢

id <- c(1:50)
c <- c(10:59)
d <- c(200:152, by=2)
e <- c(352:400, by=2)

df<-cbind.data.frame(id, c, d, c)

3 个答案:

答案 0 :(得分:1)

您的示例代码需要一些调整,但是我认为这是您要记住的:

id <- c(1:50)
c <- c(10:59)
d <- seq(200, 152, by = -2)
e <- seq(from = 452, to = 500, by=2)

df<-cbind.data.frame(id, c, d, e)

这将获得字母为“ 3”的记录

df[stringr::str_detect(df$c, "3") | 
   stringr::str_detect(df$d, "3") |
   stringr::str_detect(df$e, "3") , ]

答案 1 :(得分:1)

假设您不想更改id列(即第一列)中的值,可以执行以下操作:

#Replace numbers that have 3 with "yes"
df[-1][sapply(df[-1], grepl, pattern = 3)] <- 'yes'
#Replace rest of the numbers with "no".
df[-1][df[-1] != 'yes'] <- 'no'

答案 2 :(得分:1)

我们也可以将str_detectcase_when一起使用

library(stringr)
library(dplyr)
df %>% 
  set_names(make.unique(names(.))) %>% 
  mutate(across(-id, ~ case_when(str_detect(., '3') ~ 'yes', TRUE ~ 'no')))