Frage Bedingte Zeilenentfernung in einem R-Datenrahmen


Hier ist ein Beispieldatenrahmen:

df <- data.frame(t1 = c(1,2,3,4), t2 = c(7,3,8,1), t3 = c(1,1,1,1))

df
  t1 t2 t3
1  1  7  1
2  2  3  1
3  3  8  1
4  4  1  1

Mein Ziel ist es, den maximalen Wert aus jeder Spalte zu entfernen. Für Spalten wie t3, in denen alle Werte in der Spalte gleich sind, würde ich einfach einen einzelnen Wert entfernen, so dass alle drei Spalten im Datenrahmen mit drei Zeilen enden, wie unten:

df2
  t1 t2 t3
1  1  7  1
2  2  3  1
3  3  1  1

5
2018-05-28 18:31


Ursprung


Antworten:


Wie wäre es, nur zu verwenden which.max da dies nur einen Wert auswählen würde (d. h. den Index des ersten Auftretens des Maximalwerts):

as.data.frame(lapply(df, function(x) x[-which.max(x)]))
#   t1 t2 t3
# 1  1  7  1
# 2  2  3  1
# 3  3  1  1

4
2018-05-28 18:33



Versuchen

library(data.table)
 setDT(df)[, lapply(.SD, function(x) x[-which.max(x)])]

4
2018-05-28 18:33