【问题标题】:How to swap row values in the same column of a data frame?如何交换数据框同一列中的行值?
【发布时间】:2019-02-27 04:58:12
【问题描述】:

我有一个如下所示的数据框:

ID   Loc
 1    N  
 2    A   
 3    N
 4    H
 5    H  

我想在 Loc 列中交换 A 和 H,同时不触及值为 N 的行,这样我得到:

ID   Loc
 1    N  
 2    H   
 3    N
 4    A
 5    A 

此数据帧是管道的结果,因此我正在寻找是否可以将此操作附加到管道。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    你可以试试:

    df$Loc <- chartr("AH", "HA", df$Loc)
    df
    
      ID Loc
    1  1   N
    2  2   H
    3  3   N
    4  4   A
    5  5   A
    

    【讨论】:

      【解决方案2】:

      我们可以尝试将两个对 ifelse 的调用链接在一起,以获得基本 R 选项:

      df <- data.frame(ID=c(1:5), Loc=c("N", "A", "N", "H", "H"), stringsAsFactors=FALSE)
      df$Loc <- ifelse(df$Loc=="A", "H", ifelse(df$Loc=="H", "A", df$Loc))
      df
      
        ID Loc
      1  1   N
      2  2   H
      3  3   N
      4  4   A
      5  5   A
      

      【讨论】:

        【解决方案3】:

        如果你有一个因素,你可以简单地扭转这些水平

        l <- levels(df$Loc)
        l[l %in% c("A", "N")] <- c("N", "A")
        
        df
        #   ID Loc
        # 1  1   A
        # 2  2   N
        # 3  3   A
        # 4  4   H
        # 5  5   H
        

        数据:

        df <- structure(list(ID = 1:5, Loc = structure(c(3L, 1L, 3L, 2L, 2L
        ), .Label = c("A", "H", "N"), class = "factor")), .Names = c("ID", 
        "Loc"), class = "data.frame", row.names = c(NA, -5L))
        

        【讨论】:

          猜你喜欢
          • 2021-06-29
          • 1970-01-01
          • 2019-12-01
          • 2018-04-04
          • 2015-11-23
          • 2023-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多