0

假设我有以下数据框:

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
4

1 回答 1

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
于 2013-08-16T07:40:33.810 回答