与ifelse等效,但在R中有一个选项?

与ifelse等效,但在R中有一个选项?,r,if-statement,comparison,R,If Statement,Comparison,假设我在一个数据帧中有两个观测值,我想比较它们有多相似。我特别想知道两件事:它们有多少共同的特定变量的缺失值,以及它们有多少共同的特定变量的非缺失值 从我所看到的,无论是交叉、%%或匹配函数都不适用于这个目的,因为它们不考虑值的顺序,只有当它们在集合中找到时才存在。p> 我提供了一个检查NA值的单行解决方案,用一个数字替换,否则它只返回NA。然后我只想比较非NA值之间的重叠,因此我想用一个占位符值(如555)替换sequenceA的NA,用一个不同的占位符值(如666)替换sequenceB的N

假设我在一个数据帧中有两个观测值,我想比较它们有多相似。我特别想知道两件事:它们有多少共同的特定变量的缺失值,以及它们有多少共同的特定变量的非缺失值

从我所看到的,无论是交叉、%%或匹配函数都不适用于这个目的,因为它们不考虑值的顺序,只有当它们在集合中找到时才存在。p> 我提供了一个检查NA值的单行解决方案,用一个数字替换,否则它只返回NA。然后我只想比较非NA值之间的重叠,因此我想用一个占位符值(如555)替换sequenceA的NA,用一个不同的占位符值(如666)替换sequenceB的NA


我正在寻找一个单线解决方案:如果有一个等价于ifelse的选项而没有else或donothing选项,我可以很容易地看到它。解决这一问题的大多数类似问题的答案都是只对向量进行子集,然后重新分配以获得它们共同的特定变量的缺失值,您可以使用

# Two Ordered Vectors

sequenceA <- c(1, 2, NA, 4)
sequenceB <- c(4, 2, NA, 1) 

df <- data.frame(sequenceA, sequenceB)


sum(ifelse(!is.na(df[1,]), 888, 1) == ifelse(!is.na(df[2,]), 999, 1)) # Number of NA values that are in the same position
#? Number of non-NA values that are in the same position
这也可以读取为位于相同位置的NA值的数量

获取特定变量共有多少个非缺失值

sum(is.na(df$sequenceA) & is.na(df$sequenceB))
#[1] 1
这也可以读取为处于相同位置的非NA值的数量

要检查相同的值,我们可以

sum(!is.na(df$sequenceA) & !is.na(df$sequenceB))
#[1] 3

第二部分不是我想要的。它给3,应该是1,它没有考虑相同的位置。@Kuku它在考虑它,对吗?在相同位置有3行非缺失。你是说同样的价值吗?sumdf$sequenceA==df$sequenceB,na.rm=TRUE?
sum(df$sequenceA == df$sequenceB, na.rm = TRUE)