2015-11-17 3 views
1

Это вариация вопроса об использовании функции тах() в заявлении, которое я для фильтрации data.table: R data.table using max in i statementR data.table с помощью медианного я заявление

Теперь я пытаюсь выяснить, как использовать функцию median() в той же ситуации. Вот мой код, который возвращает все строки:

> test_dt <- data.table(value1 = 1:10, value2 = 2:11, value3 = 3:12) 
> test_dt[median(c(value1, value2, value3)) < 7] 
    value1 value2 value3 
1:  1  2  3 
2:  2  3  4 
3:  3  4  5 
4:  4  5  6 
5:  5  6  7 
6:  6  7  8 
7:  7  8  9 
8:  8  9  10 
9:  9  10  11 
10:  10  11  12 

А вот то, что я ожидаю, чтобы получить, если функция медиана() работала на каждой строке отдельно:

value1 value2 value3 
1:  1  2  3 
2:  2  3  4 
3:  3  4  5 
4:  4  5  6 
5:  5  6  7 
6:  6  7  8 
+2

Если у вас есть числовой набор данных, работа с матрицами, вероятно, больше смысла. Вы можете сделать что-то вроде 'matrixStats :: rowMedians (as.matrix (test_dt [, value1: value3, with = FALSE])) <7', например, чтобы найти правильные индексы. –

+0

@DavidArenburg Если вы ставите это как ответ, я буду отмечать его как правильный. Это кажется запутанным, но оно работает. –

+1

Это не про свернутый или нет, речь идет о структуре данных, с которой вы работаете. Если бы 'test_dt' уже была матрицей, решение было бы просто' test_dt [rowMedians (test_dt) <7,] ', это запутанное? Все зависит от структуры ваших данных и от того, что вы планируете с ней делать. –

ответ

1

Вот решение с использованием данных .table :: транспонирования (в два раза, поэтому его не unconvoluted):