如何检查向量元素是否在数据框的分组列中并添加二进制列(是,否)

How to check if vector elements are in grouped column of a dataframe and add a binary column (yes, no)

我有一个数据框,其中一列是字母 A 到 Z (name_x),另一列是值 (value_x)。

为简单起见,这 26 行表示一组多行。

我想检查向量 vocals vocals <- c("A", "E", "I", "O", "U") 中的值是否在数据帧 df 的列 name_x 中,并将第三列附加到数据帧,如果是则为 1,如果不是则为 0 . 我用 dplyr 的 case_when 函数尝试了它并得到了这个错误:

Fehler:mutate() 输入 vocal_yes 有问题。 x 输入 vocal_yes 无法回收到大小 26。 i 输入 vocal_yescase_when(vocals %in% name_x ~ 1, TRUE ~ 0)。 i 输入 vocal_yes 的大小必须为 26 或 1,而不是 5。 运行 rlang::last_error() 查看错误发生的地方。

我明白这个问题了。有没有办法克服这个问题。非常感谢。

代码:

library(dplyr)

# constructing the dataframe
name_x <- LETTERS[1:26]
value_x <- sample.int(100, 26)

df <- data.frame(name_x, value_x)

# vector vocals
vocals <- c("A", "E", "I", "O", "U")
# vector consonant
consonant <- c("B", "C", "D", "F", "G", "H", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "V", "W", "X", "Y", "Z")

df1 <- df %>% 
  mutate(vocal_yes = case_when(vocals %in% name_x ~ 1,
                               TRUE ~ 0)
         )
df1 <- df %>% 
  mutate(vocal_yes = case_when(name_x %in% vocals ~ 1,
                               TRUE ~ 0)
         )

如果name_x中只有一个字母,这将解决问题。

为了更好地理解尝试这个简单的代码

vocals <- c('a', 'e', 'i', 'o', 'u')

letters %in% vocals

vocals %in% letters

我们也可以不用 case_when

library(dplyr)
df  <- df %>%
          mutate(vocal_yes = +(name_x %in% vocals))