r - 等效于 ifelse 但在 R 中有一个选项?
问题描述
# 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
假设我在数据框中有两个观察结果,我想比较它们的相似程度。我想具体了解两件事:它们共有多少特定变量的缺失值,以及它们共有的特定变量有多少非缺失值。
据我所知,intersect、%in%或match函数都不能用于此目的,因为它们不考虑值的顺序,只有在集合中找到它们时才考虑它们。
我提供了一种单行解决方案来检查 NA 值,方法是用数字替换(否则它只会返回 NA)。然后我只想比较非 NA 值之间的重叠,因此我想将 NA 替换为用一个占位符值(例如“555”)替换sequenceA的NA,用一个不同的占位符值(例如“666”)替换sequenceB的NA .
我正在寻找一个单行的解决方案:如果有一个相当于ifelse而没有else或什么都不做的选项,我可以很容易地看到它。解决此问题的大多数类似问题都会得到答复,只需对向量进行子集化并重新分配 ( <- ) 值或使用if(){}命令,这会使解决方案过长(特别是如果这是我自己发现的问题平时想做)。我是否错过了 R 中针对此类问题的最佳良好实践解决方案?
解决方案
要获取它们共有的特定变量的缺失值,您可以使用
sum(is.na(df$sequenceA) & is.na(df$sequenceB))
#[1] 1
这也可以读取为NA
相同位置的值的数量。
获取特定变量共有多少个非缺失值
sum(!is.na(df$sequenceA) & !is.na(df$sequenceB))
#[1] 3
这也可以读取为NA
相同位置的非值的数量。
要检查相同的值,我们可以这样做
sum(df$sequenceA == df$sequenceB, na.rm = TRUE)
推荐阅读
- html - 如何在 Angular 6 组件中嵌入数据(PDF Base 64)
- python - 如何在python中创建一个if检查玩家的分数是否为10
- java - Jenkinsfile 任务失败 [不支持的类文件主要版本 57]
- elasticsearch - Elasticsearch / Lucene:确定索引中字段使用的总字节数
- python - 在python3中打印每两个字母对
- python - 将python列表传递给json
- java - 当内存损坏时,Java 中的相同引用/实例变量会发生什么?
- nest-device-access - 新设备访问 API 似乎非常有限
- spring-boot - Spring Data ObjectOptimisticLockingFailureException:批量更新从更新[0]返回了意外的行数;实际行数:0;预期:1
- android - 发布 APK 未按预期工作,它使我的设备颤抖