【问题标题】:organise dataframe to align rows in r组织数据框以对齐 r 中的行
【发布时间】:2018-12-26 06:30:41
【问题描述】:

我需要整理一个非常混乱且庞大的数据框。我已经很长时间没有使用 R,因此我们将不胜感激。

例如,我的数据框如下所示:

x1 = c("a", "c", "b") 
x2 = c("b", "a", "") 
x3 = c("b", "c", "a") 
df = data.frame(x1, x2, x3)

并且需要重新组织以将行对齐,如下所示:

x1 = c("a", "b", "c") 
x2 = c("a", "b", "") 
x3 = c("a", "b", "c") 
df = data.frame(x1, x2, x3)

有人可以帮忙吗?

【问题讨论】:

    标签: r sorting alignment row reorganize


    【解决方案1】:

    需要明确的是,x1、x2 和 x3 实际上是列。您的原始 data.frame 如下所示:

      x1 x2 x3
    1  a  b  b
    2  c  a  c
    3  b     a
    

    您是否将行与列混淆了? x1 = c("a", "c", "b") - 将 x1 视为列标题或特征,而 "a"、"c" 和 "b" 是该列的元素。这可能会令人困惑,因为您是按行输入的。

    【讨论】:

    • 嗨,是的,x1、x2、x3 是列标题,“a”“b”“c”是数据框中的字符。 “”是代表数据中的一些NaN。
    • "" NA之间有区别。如果你想创建一个带有 NA 的数据框,你可以这样做df = data.frame(x1 = c("a", "c", "b") , x2 = c("b", "a", NA) , x3 = c("b", "c", "a") )
    【解决方案2】:
    x1 = c("a", "c", "b") 
    x2 = c("b", "a", "") 
    x3 = c("b", "c", "a") 
    df = data.frame(x1, x2, x3)
    
    library(dplyr)
    
    # function that orders non blank values and then adds blanks (if they exist)
    f = function(x) c(sort(x[x!=""]), x[x==""])
    
    # apply function to each column using character columns/variables
    df %>% mutate_all(~f(as.character(.)))
    
    #   x1 x2 x3
    # 1  a  a  a
    # 2  b  b  b
    # 3  c     c
    

    【讨论】:

      【解决方案3】:

      试试:

      x1 = c("a", "c", "b") 
      x2 = c("b", "a", "") 
      x3 = c("b", "c", "a") 
      df = data.frame(x1, x2, x3)
      data.frame(lapply(df, function(x) {
        res <- as.character(x)
        res[res == ""] <- NA
        res <- sort(res, na.last = TRUE)
        res[is.na(res)] <- ""
        res <- as.factor(res)
        res
      }))
      

      【讨论】:

        猜你喜欢
        • 2021-11-05
        • 2015-03-22
        • 1970-01-01
        • 1970-01-01
        • 2018-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多