我有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)
答案 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_detect
与case_when
一起使用
library(stringr)
library(dplyr)
df %>%
set_names(make.unique(names(.))) %>%
mutate(across(-id, ~ case_when(str_detect(., '3') ~ 'yes', TRUE ~ 'no')))