检查表元素是否与列名相同

丹麦语

我有以下数据:

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

也就是说,对于一行的每个元素(在以product开头的列中),请检查该元素是否与列的名称相同(在以product开头的列之后),然后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我们可以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')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章