Совет с использованием функции pivot_longer для создания двух столбцов из нескольких исходных столбцов - PullRequest
0 голосов
/ 19 июня 2020

Мне было интересно, могут ли люди помочь мне, пожалуйста. Вероятно, это простая проблема, но я не могу ее решить. Если вы посмотрите на мой код, у меня есть несколько интересных переменных: Big0.7: Small0.9, а затем AttractOne: AttractSix.

  ptn Condition Big0.7 X_AttractONE Med0.7 AttractTWO Small0.7 AttractTHREE Big0.9 AttractFOUR Med0.9 AttractFIVE Small0.9 AttractSIX SECScore G.Health
1   1         1      2            5      2          5        1            5      2           5      1           5        2          5     72.8        6
2   2         2      3            4      2          5        3            4      2           5      1           2        1          4     79.8        6
3   3         2      2            4      3          4        3            4      2           4      1           3        2          4     48.8        7
4   4         2      5            1      1          4        1            4      1           4      1           3        1          4     55.4        5
5   5         2      3            4      3          4        3            4      2           4      1           4        2          4     61.3        6
6   6         1      2            4      2          4        2            4      2           4      2           4        2          4     45.4        6

Я пытаюсь изменить эти данные с широкого на длинный формат, чтобы все Big0.7: Big0.9 занимали одну колонку, а AttractOne: AttractSix все занимали другую.

Мне удалось сделать это для Big0.7: Big0.9, но я не могу понять, как это сделать для них обоих одновременно - возможно, потому что я не совсем понимаю концепция names_sep или names_patern.

maybe %>% pivot_longer(cols = c(Big0.7, Med0.7, Small0.7, Big0.9, Med0.9, Small0.9), names_to= "PreferenceRate", values_to = "count")

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

Лиам

1 Ответ

0 голосов
/ 19 июня 2020

Сделайте Big0.x, Med0.x, Small0.x аналогично Attractx, затем используйте специальную переменную .value с names_pattern

library(tidyr)
df %>% 
  rename('BMSONE'=Big0.7, 'AttractONE'=X_AttractONE, 'BMSTWO'=Med0.7,'BMSTHREE'=Small0.7,'BMSFOUR'=Big0.9,'BMSFIVE'=Med0.9,'BMSSIX'=Small0.9) %>% 
  pivot_longer(BMSONE:AttractSIX, names_to = c('.value','set'), names_pattern = "(BMS|Attract)(.*)")

# A tibble: 36 x 7
     ptn Condition SECScore G.Health set     BMS Attract
   <int>     <int>    <dbl>    <int> <chr> <int>   <int>
 1     1         1     72.8        6 ONE       2       5
 2     1         1     72.8        6 TWO       2       5
 3     1         1     72.8        6 THREE     1       5
 4     1         1     72.8        6 FOUR      2       5
 5     1         1     72.8        6 FIVE      1       5
 6     1         1     72.8        6 SIX       2       5
 7     2         2     79.8        6 ONE       3       4
 8     2         2     79.8        6 TWO       2       5
 9     2         2     79.8        6 THREE     3       4
10     2         2     79.8        6 FOUR      2       5
# … with 26 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...