r语言 - 从奇数位置的数据框中构建真值表



我有一个包含多个字符串变量的数据框架。

library(tidyverse)
animals <- data.frame(
a = c("antilope", "giraffe", "zebra"),
b = c("giraffe", "zebra", NA),
c = c("zebra", NA, NA))

我想把它变成一个表,如果动物出现在行中的任何地方,则显示TRUE/FALSE。我希望颜色代表动物的类型。

unique_names <- c("antilope", "giraffe", "zebra")
colnames(animals) <- unique_names

因此,我的想法是让R进行逐行扫描,如果特定行的任何一个单元格与列名匹配,则写入TRUE。最终结果应该是:

data.frame(
antilope = c(TRUE, FALSE, FALSE),
giraffe = c(TRUE, TRUE, FALSE),
zebra = c(TRUE, TRUE, TRUE)
)

我已经成功地用一个模式做到了这一点,像这样:

animals %>% 
rowwise() %>% 
transmute(giraffe = any(str_detect(string= across(), pattern = "giraffe")))

我可以通过复制/粘贴来重复这一行,但这似乎不是一个非常程序化的方法。是否有可能以更普遍的方式做到这一点?

in Base R:

t(table(stack(animals)))>0
values
ind antilope giraffe zebra
a     TRUE    TRUE  TRUE
b    FALSE    TRUE  TRUE
c    FALSE   FALSE  TRUE

如果你想要一个数据框架:

as.data.frame.matrix(t(table(stack(animals)))>0)
antilope giraffe zebra
a     TRUE    TRUE  TRUE
b    FALSE    TRUE  TRUE
c    FALSE   FALSE  TRUE

如果你需要使用unique_name向量:注意你得到一个矩阵,你可以转换为数据帧

Vectorize(grepl, 'pattern')(unique_names, animals)
antilope giraffe zebra
[1,]     TRUE    TRUE  TRUE
[2,]    FALSE    TRUE  TRUE
[3,]    FALSE   FALSE  TRUE

最新更新