当前位置:  开发笔记 > 编程语言 > 正文

如何同时在矢量中将值相互更改?

如何解决《如何同时在矢量中将值相互更改?》经验,为你挑选了1个好方法。

我有这个载体 b <- c(1, 2, 2, 1, 2, 1, 1, 2, 2, 1)

我需要将所有1s替换为2s,将所有2s替换为1s.

我已经尝试过替换选项以及b==1 <- 2但它需要同时工作.怎么样



1> MichaelChiri..:

一堆不同的方法来做到这一点.不知道你为什么要同时做...

但如果你绝对痴迷于此,那怎么样:

b <- ifelse(b == 1, 2, 1)

或者您可以编写一个简单的交换函数:

swap <- function(x){
  if(length(us <- unique(x)) > 2L) stop("this function is too naive for this vector")
  out <- vector(class(x), length(x))
  out[x == us[1L]] <- us[2L]
  out[x == us[2L]] <- us[1L]
  out
}

Jota添加了查找表方法

b <- c("1" = 2, "2" = 1)[b]

类似的版本是使用factors:

b <- factor(b, levels = c("1" = 2, "2" = 1))

(看起来这看起来没用,直到你看一下as.integer(b))

这应该更普遍地工作,例如b <- c(1, 1, 2, 2, 2, 3); c("1" = 3, "2" = 1, "3" = 2)[b],但如果这似乎有点难以绕过最好的方式可能只是一步一步:

idx <- which(b == 1)
b[idx] <- 2
b[-idx] <- 1

另一种方式(受尼古拉的答案启发)是:

b <- (idx <- b == 1)*2 + !idx

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有