r - 如何在不比较NA的情况下比较列之间的值的相等性?

标签 r

我想比较数据框第一行中的任何值是否匹配。作为返回,我想得到 1 代表 TRUE,0 代表 FALSE。我只尝试处理第一行,因为稍后我想为数据帧的所有 1000 行编写一个 for 循环。

这是我正在处理的第一行。

  illness_1 illness_2 illness_3 illness_4 illness_5 illness_6 illness_7
1      1065      1139        NA        NA        NA        NA        NA
  illness_8 illness_9 illness_10 illness_11 illness_12 illness_13 DC1 DC2 DC3
1        NA        NA         NA         NA         NA         NA  42  NA  NA
  DC4 DC5 DC6 DC7 DC8 DC9 DC10 DC11 DC12 DC13 DC14 DC15 DC16 DC17 DC18 DC19 DC20
1  NA  NA  NA  NA  NA  NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
  DC21 DC22 DC23 DC24 DC25 DC26 DC27 DC28 DC29 DC30 DC31 DC32 DC33 DC34 DC35
1   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
  DC36 DC37 DC38 DC39 DC40 DC41 DC42 DC43 DC44 DC45 DC46 DC47 DC48 DC49 DC50
1   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
  DC51 DC52 DC53 DC54 DC55 DC56 DC57 DC58 DC59 DC60 DC61 DC62 DC63 DC64 DC65
1   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
  DC66 DC67 DC68 DC69 DC70 DC71 DC72 DC73 DC74 DC75 DC76 DC77 DC78 DC79 DC80
1   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
  DC81 DC82 DC83 DC84 DC85 DC86 DC87 DC88 DC89 DC90 DC91 DC92 DC93 DC94 DC95
1   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA   NA
  DC96 DC97 DC98 DC99 DC100
1   NA   NA   NA   NA    NA

我尝试过以下代码。

ifelse(
  any(
    !is.na(dplyr::select(data_set, contains("illness")))
  ) ==
    any(
      !is.na(dplyr::select(data_set, contains("DC")))
    ), 1, 0
)

它返回了一个 1,我期待的是一个 0。

有人可以帮忙吗?提前致谢。

最佳答案

purrr::discard() 的帮助下,使用 dplyr::rowwise()c_across() 比较您的列集 code> 在比较之前删除 NA:

library(dplyr)
library(purrr)

dat %>% 
  rowwise() %>% 
  mutate(check = any(
    discard(c_across(contains("illness")), is.na) %in%
    discard(c_across(contains("DC")), is.na)
  )) %>% 
  ungroup()
# A tibble: 3 × 7
  illness_1 illness_2 ilnness_3   DC1   DC2   DC3 check
      <dbl>     <dbl>     <dbl> <dbl> <dbl> <dbl> <lgl>
1         1         4        NA    NA     1    98 TRUE 
2         2        NA         8    99    NA    97 FALSE
3        NA        NA        NA     2    NA    NA FALSE

示例数据:

dat <- data.frame(
  illness_1 = c(1, 2, NA),
  illness_2 = c(4, NA, NA),
  ilnness_3 = c(NA, 8, NA),
  DC1 = c(NA, 99, 2),
  DC2 = c(1, NA, NA),
  DC3 = c(98, 97, NA)
)

关于r - 如何在不比较NA的情况下比较列之间的值的相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75514898/

相关文章:

R:仅当键值相同并且键在连续行中重复时,如何对行中的值求和?

R:在 ggplot2 中使用变量名

r - 从 R 中的列表中获取整个列表作为 Json

database - 如何在 R 中读取 MNIST 数据库?

r - 将多个对齐的绘图放置在一页上时避免浪费空间

r - 从输出方差分析中提取 P 值列(汽车包)

r - 是否可以像 dcast 一样在 tidyr 中的多列上使用扩展?

r - 匹配 %in% 的行为

r - Mapview 弹出图出现在悬停时?

r - 在 R data.table 中计算总和的每个变量的聚合