R-Выберите строки, которые соответствуют определенным критериям в сотнях столбцов в R - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть фрейм данных, который выглядит следующим образом, но состоит из сотен строк и столбцов, что затрудняет традиционную фильтрацию в R.

Упрощенное изображение показано ниже:

строки представляют значения из теста, а столбцы представляют различные обработки

Как выбрать все строки (т. е. тесты), которые имеют значения от -0,5 до 1 для каждого столбца "обработки", и сгенерировать это каквыход?Ваши мысли очень ценятся!

1 Ответ

0 голосов
/ 11 сентября 2018

Создать пример данных:

df <- data.frame(
    test = paste0("test", 1:18),
    d1 = c(rep(-57, 7), 0, rep(-99, 10)),
    d2 = c(rep(-4, 14), 1, 0.1, -99, -99),
    d3 = c(rep(-89, 3), 0.99, -47, 0.8, rep(-55, 8), -1.56, 0.1, 1, 0),
    d4 = c(rep(-99, 6), rep(-57, 5), 0.7, -3, -13, -99, 0.98, -99, 0.99),
    d5 = c(rep(-57, 2), 0.4, rep(-99, 14), -57),
    stringsAsFactors = FALSE
)

Если вам просто нужно схватить элементы:

# get TRUE/FALSE matrix of whether element meets your criteria
meets_criteria <- sapply(df[,-1], function(x) x >= -0.5 & x <= 1)

# "extract" elements that meet your criteria; result is a vector
df[,-1][meets_criteria]

Если вы также хотите сохранить значения строки / столбца, связанные с элементом

(это соответствует подходу @ thelatemail в комментариях выше):

# reshape to long
dflong <- tidyr::gather(df, dvar, dvalue, d1:d5)

# subset to meet your criteria
dflong[dflong$dvalue >= -0.5 & dflong$dvalue <= 1, ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...