gpt4 book ai didi

r - 删除具有重复值的行并将 NA 作为单独的值包含在内

转载 作者:行者123 更新时间:2023-12-02 17:58:37 27 4
gpt4 key购买 nike

我有一个像这样的 df:

testdf <- structure(list(POS = c(37, 44, 50, 83), Col1 = c("A", "C", NA, 
"G"), Col2 = c("A", NA, "T", "C")), class = "data.frame", row.names = c(NA,
-4L))

看起来像这样:

     POS  Col1 Col2
[1,] "37" "A" "A"
[2,] "44" "C" NA
[3,] "50" NA "T"
[4,] "83" "G" "C"

我想排除 Col1 和 Col2 之间相同的所有行(这意味着只有第 1 行)。不幸的是我不知道如何处理 NA。当我尝试时

testdf[testdf$Col1 != testdf$Col2,]

它不将 NA 视为自己的条目?

预期输出应该是:

     POS  Col1 Col2
[1,] "44" "C" NA
[2,] "50" NA "T"
[3,] "83" "G" "C"

我宁愿不将 NA 改造成其他东西。

testdf %>%
rowwise %>%
filter(Col1 != Col2)

也无法正常工作。

最佳答案

您可以将 is.na() 添加到过滤条件中。

您还应该处理两列都是NA的情况;我在您的示例数据中添加了这样的行。如果您想保留这些行,则:

library(dplyr)

testdf %>%
filter(is.na(Col1) | is.na(Col2) | Col1 != Col2)
  POS Col1 Col2
1 44 C <NA>
2 50 <NA> T
3 83 G C
4 99 <NA> <NA>

如果您想删除它们,请使用xor()而不是|:

testdf %>%
filter(xor(is.na(Col1), is.na(Col2)) | Col1 != Col2)
  POS Col1 Col2
1 44 C <NA>
2 50 <NA> T
3 83 G C

关于r - 删除具有重复值的行并将 NA 作为单独的值包含在内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74993990/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com