【问题标题】:Double comparison and replacing双重比较和替换
【发布时间】:2017-07-08 20:25:57
【问题描述】:

我有问题。如果满足两个条件,我需要替换两列:

  1. 我想从数据中比较的两列必须相等(在同一行中成对)。
  2. 两列必须等于 7 或 8 或 9。

如果条件已满足,R 应替换 NA 的两列。

例如: 假设我想比较数据中的第二列和第三列:

data[,2] = 7,2,4,5,9,2,1,8,2,4
data[,3] = 3,2,5,6,9,3,1,8,2,4

结果我想收到它:

data[,2] = 7,2,4,5,NA,2,1,NA,2,4
data[,3] = 3,2,5,6,NA,3,1,NA,2,4

当两列相等且等于{7 or 8 or 9}.时,R 应该比较 NA 两列

【问题讨论】:

  • 你尝试了什么?为什么它不起作用? SO 不是代码编写服务。

标签: r replace compare conditional-statements


【解决方案1】:

我们可以根据两列创建一个逻辑索引

i1 <- data[,2]==data[,3] & data[,2] %in% 7:9 & data[,3] %in% 7:9
data[i1, 2:3] <- NA

或者Reduce&amp;

data[Reduce(`&`, lapply(data[2:3], `%in%`, 7:9)), 2:3] <- NA

数据

data <- structure(list(col1 = 1:10, col2 = c(7, 2, 4, 5, 9, 2, 1, 8, 
2, 4), col3 = c(3, 2, 5, 6, 9, 3, 1, 8, 2, 4)), .Names = c("col1", 
 "col2", "col3"), row.names = c(NA, -10L), class = "data.frame")

【讨论】:

  • 谢谢,但是如果一列有 7 和第二个 8 在同一行中它不能替换。如果我想比较其他值(不是 7:9,例如 1、4、8)我应该创建一个向量吗? c(1,4,8)?谢谢。
  • @BartekCzech 在第一种方法中,data[,2]==data[,3] 负责处理。其次,是Reduce("&amp;",检查它们是否都是TRUE。如果您想比较 c(1,4,8),请使用它而不是 7:9,即 Reduce("&amp;", lapply(data[2:3], "%in%, c(1,4,8))
猜你喜欢
  • 2012-10-09
  • 2016-05-10
  • 2011-08-02
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
相关资源
最近更新 更多