【问题标题】:How to find min value of each col in df and delete previous values?如何找到df中每个col的最小值并删除以前的值?
【发布时间】:2013-09-07 01:42:01
【问题描述】:

假设我有以下数据框:

x1 <- c(12:4, 5:8, NA, NA)
x2 <- c(15:8, 9:15)
x3 <- c(14:9, 10:13, NA, NA, NA, NA, NA)

df <- data.frame(x1, x2, x3)

如何在每列中搜索最小值,删除之前的所有值并用 NA 填充列以保持相等的长度? NA 只应添加到列的末尾,以便最低值位于第 Nr 行。 1. 我真正的 dfs 有不同数量的列和行。

想要的结果是:

  x1  x2  x3
1  4   8   9 
2  5   9  10
. 
.
8 NA  15  NA

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我假设您的“df”实际上是:

    df <- data.frame(x1, x2, x3)
    

    在这种情况下,您可以尝试以下方法:

    data.frame(lapply(df, function(y) {
      y[1:which.min(y)] <- NA
      y
    }))
    #    x1 x2 x3
    # 1  NA NA NA
    # 2  NA NA NA
    # 3  NA NA NA
    # 4  NA NA NA
    # 5  NA NA NA
    # 6  NA NA NA
    # 7  NA NA 10
    # 8  NA NA 11
    # 9  NA  9 12
    # 10  5 10 13
    # 11  6 11 NA
    # 12  7 12 NA
    # 13  8 13 NA
    # 14 NA 14 NA
    # 15 NA 15 NA
    

    阅读您的评论和编辑后,也许这就是您要寻找的:

    data.frame(lapply(df, function(y) {
      x1 <- rep(NA, nrow(df))
      x2 <- which.min(y):length(y)
      x1[seq_along(x2)] <- y[x2]
      x1
    }))
    #    x1 x2 x3
    # 1   4  8  9
    # 2   5  9 10
    # 3   6 10 11
    # 4   7 11 12
    # 5   8 12 13
    # 6  NA 13 NA
    # 7  NA 14 NA
    # 8  NA 15 NA
    # 9  NA NA NA
    # 10 NA NA NA
    # 11 NA NA NA
    # 12 NA NA NA
    # 13 NA NA NA
    # 14 NA NA NA
    # 15 NA NA NA
    

    【讨论】:

    • 感谢您的建议,我认为我的问题还不够清楚。我不想在列的开头有 NA。
    • 谢谢阿南达,就是这样!
    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2017-08-01
    • 2018-03-12
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多