【问题标题】:How to replace specific vector values?如何替换特定的向量值?
【发布时间】:2020-09-22 17:52:13
【问题描述】:

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

  • 如果该值等于 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)。

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

【问题讨论】:

    标签: r


    【解决方案1】:

    试试这个替换方案。向量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
    

    【讨论】:

    • 这很有帮助。感谢您的宝贵帮助!
    【解决方案2】:

    case_when 的选项

    library(dplyr)
    case_when(x %in% 1:3 ~ 1, x %in% 6:8 ~ 2, x %in% c(4, 5, 9) ~ 3)
    #[1] 3 3 2 1 1 2 1 1 1 3 3 2 2 3 3
    

    数据

    set.seed(1)
    x <- sample(c(1,2,3,4,5,6,7,8,9),size=15,replace=TRUE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2016-02-01
      • 2015-01-28
      • 2018-11-17
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多