r - 如何替换特定的向量值?

标签 r

我正在尝试替换长向量值,例如:

  • 如果该值等于 1、2 或 3,则它将被替换为 1。
  • 如果该值等于 6 、 7 、 8 ,则它将被 2 替换。
  • 如果该值等于 4 、 5 、 9 ,则它将被替换为 3 。

我尝试了以下操作,但没有给出预期的输出:

set.seed(1)
x=sample(c(1,2,3,4,5,6,7,8,9),size=15,replace=TRUE)
print("step1")
x
as.numeric(gsub(c(1,2,3), 1, x))
as.numeric(gsub(c(6,7,8), 2, x))
as.numeric(gsub(c(4,5,9), 3, x))
print("step2")

x

我获得了以下内容:

[1] "step1"

    3 4 6 9 2 9 9 6 6 1 2 2 7 4 7

Warning message in gsub(c(1, 2, 3), 1, x):
"l'argument pattern a une longueur > 1 et seul le premier élément est utilisé"

    3 4 6 9 2 9 9 6 6 1 2 2 7 4 7

Warning message in gsub(c(6, 7, 8), 2, x):
"l'argument pattern a une longueur > 1 et seul le premier élément est utilisé"

    3 4 2 9 2 9 9 2 2 1 2 2 7 4 7

Warning message in gsub(c(4, 5, 9), 3, x):
"l'argument pattern a une longueur > 1 et seul le premier élément est utilisé"

    3 3 6 9 2 9 9 6 6 1 2 2 7 3 7

[1] "step2"

    3 4 6 9 2 9 9 6 6 1 2 2 7 4 7

更准确地说,我想将向量 x 中的一组值(例如 {6,7,8})替换为一个特定值(例如 2) .

我希望我的问题很清楚,我尝试了类似问题的解决方案,但没有获得预期的输出。

最佳答案

尝试这个替换方案。向量xori具有原始值,而x已随不同条件而改变。此外,快捷方式 1:3 相当于 c(1,2,3)。代码如下:

#Code
set.seed(1)
x=sample(c(1,2,3,4,5,6,7,8,9),size=15,replace=TRUE)
xori <- x
#Replace
x[x %in% 1:3]<-1
x[x %in% 6:8]<-2
x[x %in% c(4,5,9)]<-3
#Print
xori
x

输出:

xori
 [1] 9 4 7 1 2 7 2 3 1 5 5 6 7 9 5
x
 [1] 3 3 2 1 1 2 1 1 1 3 3 2 2 3 3

如果需要一种方式:

#One way
x <- ifelse(x %in% 1:3,1,
            ifelse(x %in% 6:8,2,
                   ifelse(x %in% c(4,5,9),3,NA)))

输出:

x
 [1] 3 3 2 1 1 2 1 1 1 3 3 2 2 3 3

关于r - 如何替换特定的向量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64015195/

相关文章:

r - 需要 ui.R 以字符串形式获取输入文件/目录的路径

r - 重叠加入起点和终点

r - 为什么在函数定义中接受符号字符?

r - 动物园中重复的 row.names (index) 错误

graphics - 绘图窗口的总标题

r - 基于应用于多列的单个条件对数据框进行子集

r - 如何从R中的文件读取逻辑数据

R 自动名称修改

在 Shiny 的主面板中右对齐元素

mysql - 安装 R 包时找不到 mysql.h 文件