2013-08-16 46 views
0

假設我有以下的數據幀:如何查找df中每列的最小值並刪除以前的值?

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) 

我如何搜索每列中的最小值,刪除前的所有值和填充的NAS列以保持相等的長度? NA只應添加到列的末尾,以便最低值在行Nr中。 1. 我真正的dfs有不同數量的列和行。

期望的結果是:

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

回答

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 
+0

謝謝你的建議,我想我的問題不夠清楚。我不想在排行的開頭有新生。 – Markus

+0

非常感謝Ananda,就是這樣! – Markus

相關問題