代码之家  ›  专栏  ›  技术社区  ›  Babai I.

交换数据中的字符或字符串。帧[重复]

  •  1
  • Babai I.  · 技术社区  · 6 年前

    我有一个数据。带性别栏的框架:

    Name <- c("Alex", "Lilly", "Mark", "Oliver", "Martha", "Lucas", "Caroline")
    Age <- c(25, 31, 23, 52, 76, 49, 26)
    Height <- c(177, 163, 190, 179, 163, 183, 164)
    Weight <- c(57, 69, 83, 75, 70,  83, 53)
    Sex <- c("F", "M", "F", "F", "M", "F", "M")
    

    正如你所看到的,性别是不正确的(例如,莉莉的性别是“M”),我想把所有的“F”换成“M”,把所有的“M”换成“F”。

    有这样的功能吗?

    4 回复  |  直到 6 年前
        1
  •  7
  •   akrun    6 年前

    我们可以使用 chartr 从…起 base R

    df$Sex <- chartr("FM", "MF", df$Sex)
    df$Sex
    #[1] "M" "F" "M" "M" "F" "M" "F"
    
        2
  •  3
  •   Tim Biegeleisen    6 年前

    我想你可以用 ifelse 此处:

    df$Sex <- ifelse(df$Sex == "F", "M", "F")
    df
    
          Name Age Height Weight Sex
    1     Alex  25    177     57   M
    2    Lilly  31    163     69   F
    3     Mark  23    190     83   M
    4   Oliver  52    179     75   M
    5   Martha  76    163     70   F
    6    Lucas  49    183     83   M
    7 Caroline  26    164     53   F
    

    Demo

        3
  •  2
  •   tyluRp    6 年前

    或者,使用 dplyr 我们可以使用 case_when :

    library(dplyr)
    
    df %>% 
      mutate(Sex = case_when(Sex == "F" ~ "M",
                             Sex == "M" ~ "F",
                             TRUE ~ NA_character_))
    

    数据:

    Name <- c("Alex", "Lilly", "Mark", "Oliver", "Martha", "Lucas", "Caroline") 
    Age <- c(25, 31, 23, 52, 76, 49, 26) 
    Height <- c(177, 163, 190, 179, 163, 183, 164) 
    Weight <- c(57, 69, 83, 75, 70, 83, 53) 
    Sex <- c("F", "M", "F", "F", "M", "F", "M")
    
    df <- data.frame(Name, Age, Height, Weight, Sex)
    
        4
  •  1
  •   Axeman    6 年前

    当为系数时,使用:

    df$Sex <- factor(df$Sex, c('F', 'M'), c('M', 'F'))