假设我有以下数据框:
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
答案 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