【问题标题】:Replace values from a column for vector value [duplicate]将列中的值替换为向量值[重复]
【发布时间】:2020-01-17 19:05:17
【问题描述】:

我有一个向量 x,它有 3 个级别和 10 个值,还有一个向量 y,它也有 3 个级别,但只有 3 个值。
x <- c("A","A","A","A","B","B","C","C","C","C")
y <- c("Red","Blue","Green")

我想将x 中的As 换成y[,1] 中的Red,然后将Bs 从x 换成Bluey[,2] 中的Blue,最后一个也一样。

我想将replace函数用作
z <- replace(x, c("A","B", "C"), c("Red","Blue","Green"))

有什么想法吗?

【问题讨论】:

    标签: r vector replace


    【解决方案1】:

    x1<-merge(data.frame(A=x),data.frame(A=c('A','B','C'),B=c("Red,"Blue","Green")),by='A')[,2]

    做到这一点并做到这一点

    【讨论】:

      【解决方案2】:

      使用 dplyr:

      x <- c("A","A","A","A","B","B","C","C","C","C")
      y <- c("Red","Blue","Green")
      
      z <- case_when(x == 'A' ~ 'Red', x == 'B' ~ 'Blue', x == 'C' ~ 'Green')
      

      【讨论】:

        【解决方案3】:

        我认为最接近你想要的将是使用dplyr::recode

        x <- c("A","A","A","A","B","B","C","C","C","C")
        map <- c(A = "Red", B = "Blue", C = "Green")
        res <- dplyr::recode(x, !!!map)
        

        plyr::mapvalues:

        res <- plyr::mapvalues(
          x, 
          from = c("A","B", "C"), 
          to = c("Red","Blue","Green")
        )
        

        【讨论】:

        • 在 R 中可以翻译成map[x]
        【解决方案4】:

        您可以使用库stringr

        library(stringr)
        
        z <- str_replace_all(x, c("A"="Red", "B"="Blue", "C"="Green"))
        

        您的代码不工作的原因是因为replacefunction 在第二个参数中想要一个索引列表,而不是要替换的字符串值。

        【讨论】:

          【解决方案5】:

          基本的 R 方法是将x 转换为factor,然后将integer 转换为可用于子集y 的数字索引。

          y[as.integer(factor(x, levels = unique(x)))]
          #[1] "Red"   "Red"   "Red"   "Red"   "Blue"  "Blue"  "Green" "Green" "Green" "Green"
          

          【讨论】:

            猜你喜欢
            • 2018-08-22
            • 1970-01-01
            • 2020-04-05
            • 2014-07-29
            • 1970-01-01
            • 2021-09-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多