суммировать значение некоторых конкретных переменных в r - PullRequest
1 голос
/ 19 июня 2019

Я выбираю некоторые конкретные переменные, используя grep(), чтобы выполнить некоторые другие вычисления, которые потерпели неудачу. Затем я создал новую переменную, состоящую из имени переменной и «+», а не суммы значения.

# create a df
test <- data.frame(I60_freq_t = 1,
                   I60_freq_man = 1,
                   I60_freq_woman = 1,
                   I60_freq_lo65 = 1,
                   I60_freq_hi65 = 1,
                   I61_freq_t = 1,
                   I61_freq_man = 1,
                   I61_freq_woman = 1,
                   I61_freq_lo65 = 1,
                   I61_freq_hi65 = 1,
                   I62_freq_t = 1,
                   I62_freq_man = 1,
                   I62_freq_woman = 1,
                   I62_freq_lo65 = 1,
                   I62_freq_hi65 = 1
                   )

# extract variables with different end words and use " + " to concatenate
end_with_t <- grep('t$', names(test), value = T) %>% paste(collapse = '+')
end_with_man <- grep('[^a-z]man$', names(test), value = T) %>% paste(collapse = '+')
end_with_woman <- grep('woman$', names(test), value = T) %>% paste(collapse = '+')
end_with_lo65 <- grep('lo65$', names(test), value = T) %>% paste(collapse = '+')
end_with_hi65 <- grep('hi65$', names(test), value = T) %>% paste(collapse = '+')

# sum the value 
test2 <- test %>% mutate(t = end_with_t,
                         man = end_with_man,
                         woman = end_with_woman,
                         lo65 = end_with_lo65,
                         hi65 = end_with_hi65) 
# **** What I want is sum the value not sum the variables names *********

Мои вопросы:

1.Как я могу изменить свой код, чтобы получить то, что я хочу?

2. Есть ли лучшие способы сделать это?

Любая помощь будет высоко оценена !!!

1 Ответ

2 голосов
/ 19 июня 2019

Вот одна идея использовать map_dfc для циклического перебора имен переменных и сложения их всех вместе, используя rowSums. ends_with - это способ выбора переменных на основе конца строки.

library(tidyverse)

variables <- c("_t", "_man", "_woman", "_lo65", "_hi65")

test2 <- map_dfc(variables, ~test %>% 
          select(ends_with(.x)) %>%
          rowSums()) %>%
  setNames(str_remove(variables, fixed("_")))

test2
# A tibble: 1 x 5
      t   man woman  lo65  hi65
  <dbl> <dbl> <dbl> <dbl> <dbl>
1     3     3     3     3     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...