Dictionary style replace multiple items

前端 未结 10 721
太阳男子
太阳男子 2020-11-22 05:02

I have a large data.frame of character data that I want to convert based on what is commonly called a dictionary in other languages.

Currently I am going about it li

10条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-22 05:32

    Since it's been a few years since the last answer, and a new question came up tonight on this topic and a moderator closed it, I'll add it here. The poster has a large data frame containing 0, 1, and 2, and wants to change them to AA, AB, and BB respectively.

    Use plyr:

    > df <- data.frame(matrix(sample(c(NA, c("0","1","2")), 100, replace = TRUE), 10))
    > df
         X1   X2   X3 X4   X5   X6   X7   X8   X9  X10
    1     1    2   2    1    2    0    2    0    2
    2     0    2    1  1    2    1    1    0    0    1
    3     1    0    2  2    1    0     0    1 
    4     1    2   2    2    2    1    1    0    1
    ... to 10th row
    
    > df[] <- lapply(df, as.character)
    

    Create a function over the data frame using revalue to replace multiple terms:

    > library(plyr)
    > apply(df, 2, function(x) {x <- revalue(x, c("0"="AA","1"="AB","2"="BB")); x})
          X1   X2   X3   X4   X5   X6   X7   X8   X9   X10 
     [1,] "AB" "BB" NA   "BB" "AB" "BB" "AA" "BB" "AA" "BB"
     [2,] "AA" "BB" "AB" "AB" "BB" "AB" "AB" "AA" "AA" "AB"
     [3,] "AB" "AA" "BB" "BB" "AB" "AA" NA   "AA" "AB" NA  
     [4,] "AB" "BB" NA   "BB" "BB" "BB" "AB" "AB" "AA" "AB"
    ... and so on
    

提交回复
热议问题