Как эффективно выбрать ряд переменных в R? - PullRequest
0 голосов
/ 28 января 2020

У меня есть серия переменных с именами переменных "HPV_x_ALL". Единственная разница между этими именами - это х, который является числом (например, 11, 16, 18, 33). Я хотел бы использовать -rowSums- для суммирования значений HPV_x_ALL для каждого наблюдения, и я попытался использовать * для представления чисел, но это не работает. Спасибо!

Обновление: Привет! Я добавил воспроизводимый набор данных.

structure(list(HPV_16_ALL = c(1L, NA, 0L, 0L, 0L, 0L), HPV_18_ALL = c(0L, 
NA, 0L, 0L, 0L, 0L), HPV_33_ALL = c(0L, NA, 0L, 0L, 0L, 0L)), row.names = 40:45, class = "data.frame")

1 Ответ

2 голосов
/ 28 января 2020

Без воспроизводимого примера трудно быть уверенным, что этот ответ будет правильным.

Однако, исходя из этого фиктивного примера:

set.seed(123)
df <- data.frame(Var = c(paste0("HPV_",11:15,"_ALL"),paste0("BPV_",11:15,"_ALL")),
                 Val = sample(1:100,10))

          Var Val
1  HPV_11_ALL  31
2  HPV_12_ALL  79
3  HPV_13_ALL  51
4  HPV_14_ALL  14
5  HPV_15_ALL  67
6  BPV_11_ALL  42
7  BPV_12_ALL  50
8  BPV_13_ALL  43
9  BPV_14_ALL  97
10 BPV_15_ALL  25

Вы можете получить строки, соответствующие для "HPV_xx_ALL", выполнив:

grep("HPV_\\d{2}_ALL",df$Var, perl = TRUE)

[1] 1 2 3 4 5

Таким образом, вы можете получить сумму строк, соответствующих искомому шаблону, выполнив:

sum(df[grep("HPV_\\d{2}_ALL",df$Var, perl = TRUE),"Val"])

[1] 242

Если ваш шаблон HPV_xx_ALL являются названиями столбцов, вы можете сделать то же самое, выполнив:

rowSums(df[,grep("HPV_\\d{2}_ALL", names(df), perl = TRUE)]

Это отвечает на ваш вопрос? Если нет, пожалуйста, предоставьте воспроизводимый пример вашего набора данных (см .: Как создать великолепный воспроизводимый пример R )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...