R语言如何将两个等长向量合并为长度一致的结果向量
R语言实现等长0-1向量按位合并的方法
现有两个长度一致的R语言数值向量,元素均为0/1编码:
vec1<-c(0, 0, 1, 1, 0, 0, 0, 0, 0, 0) vec2<-c(0, 0, 0, 1, 0, 0, 1, 0, 1, 0)
需要合并得到长度与原向量一致的结果,合并规则为:对应位置只要任意一个原向量取值为1,结果位置就为1;两个原向量均为0时结果为0,预期结果如下:
vec<-c(0, 0, 1, 1, 0, 0, 1, 0, 1, 0)
可通过以下几种方法实现:
- 方法1:逻辑或运算符(推荐,简洁高效)
R中|是向量化的逻辑或运算符,会对两个向量对应位置做逻辑判断,有真值则返回TRUE,否则返回FALSE,配合as.integer()将逻辑值转回0/1数值即可:vec <- as.integer(vec1 | vec2) - 方法2:平行取最大值函数
pmax()
由于0和1的最大值刚好符合“有1出1、全0出0”的合并规则,直接调用pmax()取两个向量对应位置的最大值即可,无需额外做类型转换:
该方法通用性更强,若后续向量取值不局限于0/1,只要需要取对应位置的最大值都可以使用。vec <- pmax(vec1, vec2) - 方法3:算术运算判断
先将两个向量对应位置的数值相加,再判断结果是否大于等于1,将判断结果转为0/1数值也能实现需求:
该方法逻辑直白,但写法相对冗余,不做优先推荐。vec <- as.integer(vec1 + vec2 >= 1)
内容的提问来源于stack exchange,提问作者msening
相关产品推荐
相关产品推荐

