r - 检查表的元素是否与列名相同
问题描述
我有以下数据:
data <- tibble(
product_01 = c("AB", "AC", NA),
product_02 = c("AD", NA, "AB"),
AB = NA,
AC = NA,
AD = NA)
现在,我想得到以下小标题:
> data
# A tibble: 3 x 5
product_01 product_02 AB AC AD
<chr> <chr> <lgl> <lgl> <lgl>
1 AB AD TRUE FALSE TRUE
2 AC NA FALSE TRUE FALSE
3 NA AB TRUE FALSE FALSE
即对于一行的每个元素(在以产品开头的列中)检查该元素是否与列的名称相同(在以产品开头的列之后),TRUE
如果相同则放置,FALSE
否则。有人知道如何在这里进行吗?我尝试了一些代码(主要是lapply
),但没有结果。提前致谢
解决方案
您可以使用apply
:
cols <- names(data)[-(1:2)]
data[cols] <- t(apply(data[1:2], 1, function(x) cols %in% x))
# product_01 product_02 AB AC AD
# <chr> <chr> <lgl> <lgl> <lgl>
#1 AB AD TRUE FALSE TRUE
#2 AC NA FALSE TRUE FALSE
#3 NA AB TRUE FALSE FALSE
我认为在一般情况下,我们不会已经创建具有NA
值的列。
data <- tibble(
product_01 = c("AB", "AC", NA),
product_02 = c("AD", NA, "AB"))
然后我们可以通过以下方式使用dplyr
and :tidyr
library(dplyr)
library(tidyr)
data1 <- data %>% mutate(row = row_number())
data1 %>%
pivot_longer(cols = -row,
values_drop_na = TRUE) %>%
mutate(val = TRUE) %>%
select(-name) %>%
pivot_wider(names_from = value, values_from = val, values_fill = FALSE) %>%
left_join(data1, by = 'row')
推荐阅读
- javascript - 如何防止按钮在一生中被点击超过1次
- ios - 在 Reality Composer 中创建掷骰子
- reactjs - 添加元素文本
- graphql - 如何使用 prisma nexus 解析自定义嵌套的 extendType 解析器?
- javascript - 如何在不同的组件上使用 jQuery(Angular CLI)
- scala - 如何为以下情况制作模式和警报
- python - python中跨进程访问的“已发布”值
- ios - iOS - Swift:在主线程中从数据库中获取数据,而不是在后台
- c++ - 通过套接字c ++传递包含字符串作为数据成员的结构
- swift - 快速更改初始视图控制器