我想比较数据框第一行中的任何值是否匹配。作为返回,我想得到 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() 的帮助下,使用
code> 在比较之前删除 dplyr::rowwise()
和 c_across()
比较您的列集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/