Р: Как сделать дополнительные строки из столбца? - PullRequest
0 голосов
/ 02 января 2019

У меня есть набор данных человеческих рук, где в настоящее время один человек определяется как одно наблюдение.Я хочу изменить форму данных, чтобы иметь руки в качестве отдельных наблюдений.Я пробовал что-то с пакетом «dplyr» и функцией «собрать», но безуспешно.

Итак, каждый человек находится в одном ряду:

id Gender Age   Present_R    Present_L    Dominant
1    F     2      TRUE         TRUE          R
2    F     5      TRUE         FALSE         L
3    M     8      FALSE        FALSE         R

к этому,где каждая рука находится в одной строке:

id Gender Age   Hand    Present  Dominant
1    F     2     R       TRUE     TRUE
2    F     2     L       TRUE     FALSE
3    F     5     R       TRUE     FALSE
4    F     5     L       FALSE    TRUE
5    M     8     R       FALSE    TRUE
6    M     8     L       FALSE    FALSE

Обратите внимание, что доминирование рук становится логичным.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

С небольшим кадром данных (т. Е. Несколькими переменными, независимо от количества случаев), «ручное кодирование» может быть самым простым подходом:

with(df, data.frame(id = c(id,id), Gender=c(Gender,Gender), Age=c(Age, Age), 
                    Hand = c(rep("R", nrow(df)), rep("L", nrow(df))),
                    Present = c(Present_R, Present_L),
                    Dominant = c(Dominant=="R", Dominant=="L")
                    ))
0 голосов
/ 02 января 2019

Мы можем gather в формате 'long', arrange по 'id', а затем создать 'Dominant' с помощью unlist, используя столбцы 'Present', 'Hand', удалив подстроку 'Hand'column

library(tidyverse)
gather(df1, Hand, Present, Present_R:Present_L) %>%
   arrange(id) %>%
   mutate(Dominant = unlist(df1[c("Present_L", "Present_R")]),
          id = row_number(),
          Hand = str_remove(Hand, ".*_"))
#   id Gender Age Dominant Hand Present
#1  1      F   2     TRUE    R    TRUE
#2  2      F   2    FALSE    L    TRUE
#3  3      F   5    FALSE    R    TRUE
#4  4      F   5     TRUE    L   FALSE
#5  5      M   8     TRUE    R   FALSE
#6  6      M   8    FALSE    L   FALSE

Основываясь на комментариях OP, кажется, что нам нужно сравнить' Dominant 'с' Hand '

gather(df1, Hand, Present, Present_R:Present_L) %>%
    arrange(id) %>% 
    mutate(id = row_number(),
           Hand = str_remove(Hand, ".*_"),
           Dominant = Dominant == Hand)
#   id Gender Age Dominant Hand Present
#1  1      F   2     TRUE    R    TRUE
#2  2      F   2    FALSE    L    TRUE
#3  3      F   5    FALSE    R    TRUE
#4  4      F   5     TRUE    L   FALSE
#5  5      M   8     TRUE    R   FALSE
#6  6      M   8    FALSE    L   FALSE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...