2015-05-28 4 views
5

Ниже приведен пример кадра данных:Условное удаление строк в кадре данных R

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 

Моя цель состоит в том, чтобы удалить значение макс из каждого столбца. Однако, для столбцов, как t3, где все значения в столбце равны, я бы просто удалить одно значение, так что все три столбца в кадре данных в конечном итоге с тремя рядами, как показано ниже:

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

ответ

4

Как насчет только с помощью which.max так, что бы выбрать только одно значение (то есть индекс первого появления максимального значения):

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

Nice, простое решение. Я не знал о том, что характерно для этого.max (очевидно). – bshelt141

4

Попробуйте

library(data.table) 
setDT(df)[, lapply(.SD, function(x) x[-which.max(x)])] 
Смежные вопросы