如何在df中找到每个col的最小值并删除以前的值?

时间:2013-08-16 07:32:40

标签: r dataframe

假设我有以下数据框:

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添加到cols的末尾,以使最低值在行Nr中。 1。 我真正的dfs有不同数量的cols和rows。

期望的结果是:

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

1 个答案:

答案 0 :(得分:2)

我假设你的“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