Какую функцию я должен использовать, чтобы вернуть вектор символов? - PullRequest
1 голос
/ 19 апреля 2019

Итак, у меня есть набор данных, который выглядит следующим образом:

  state.x77[1,]

Неграмотность населения Доходы Жизнь Опыт Убийство Град Град Мороз 3615,00 3624,00 2,10 69,05 15,10 41,30 20,00 Площадь 50708,00

as.numeric (state.x77 [1,]) [1] 3615,00 3624,00 2,10 69,05 15,10 41,30 20,00 50708,00

Я хочу что-то похожее на это: `[1]" Аризона "" Вашингтон "

Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 апреля 2019

Вот решение purrr:

df[pmap_lgl(df %>% select(starts_with("L0")), ~sd(c(...))>mean(c(...))), "gene_symbol"]

Это передает все столбцы, начинающиеся с L0, в функцию, которая сравнивает sd и mean, а затем возвращает логический вектор, который выбирает соответствующие строки из фрейма данных. (Предполагается, что ваш фрейм данных называется df.) * Для оператора канала и функции select требуется dplyr.

2 голосов
/ 19 апреля 2019

Вы можете сначала выбрать столбцы, для которых вы хотите применить mean и sd. Предполагая, что вы хотите столбцы, заканчивающиеся на "P". Затем вычислите построчно sd и построчно mean, сравните значения и верните соответствующее gene_symbol.

cols <- grep("P$", names(df))
df$gene_symbol[apply(df[cols],1,sd, na.rm = TRUE) > rowMeans(df[cols],na.rm = TRUE)]

Для вычисления sd мы также можем использовать функцию rowSds из matrixStats пакета

library(matrixStats)
df$gene_symbol[rowSds(as.matrix(df[cols]), na.rm = TRUE) > 
               rowMeans(df[cols], na.rm = TRUE)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...