Свертывание строк в продольном наборе данных - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть набор данных, в котором у меня было несколько строк, соответствующих базовым показателям. Я хочу свернуть эти строки по идентификатору записи, чтобы у каждого человека была только одна строка для базовых показателей. Это означает, что мне нужно свернуть все переменные, некоторые из которых являются символьными переменными. Как мне это сделать? Вот что я пробовал:

df.test %>% group_by(id) %>% filter(time == 0) %>% 
    summarise_all(., collapse=", ")

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

data.frame(id = rep(99, 5), time = c(rep(0, 3), 3, 6), v1 = c("blk", NA, NA, 2, 3), v2 = c(NA, 1, NA, 4, 5), v3 = c(NA, NA, 1, 6, 7))

и мне нужно, чтобы это выглядело так:

data.frame(id = rep(99, 3), time = c(rep(0, 1), 3, 6), v1 = c("blk", 2, 3), v2 = c(1, 4, 5), v3 = c(1, 6, 7))

Я не знаю, подходит ли здесь функция суммирования. По сути, у меня есть проблема с суммированием символов, поэтому я думаю, что суммирование не работает. В идеале все, что я действительно хочу сделать, это объединить информацию во всех строках, где время = 0 по идентификатору, чтобы у меня была единственная строка времени = 0 для каждого уникального идентификатора.

(извините, я не уверен, как заставить команду data.frame печатать фрейм данных?)

Помогите пожалуйста!

Редактировать: Пример 2

data.frame(id = c(rep(99,5), 100, 101, 101), time = c(rep(0, 3), 3, 6, 0, 0, 0), character = c(NA, NA, "blk", rep(NA, 5)), binary = c(1, rep(NA, 5), 0, NA), continuous = c(NA, NA, 2.29, rep(NA, 5)))

Это близко к тому, как выглядят мои данные. То, что я могу сказать, не работает, так это:

1) символьная переменная потеряна 2) 0 теряется в двоичной переменной (даже с! = Is.na (.) Вместо! = 0 2a) это было атомарно, и я изменил его на фактор, и теперь, похоже, работает 3) непрерывная переменная 2.29 потеряна 4) что интересно и не изображено здесь, так это то, что значения целых чисел, которые не равны 0, похоже, сохраняются, но целые числа пропали - это потому, что целые числа не могут быть прочитаны, если структура атомарна?

Вывод: я думаю, что мне нужно изменить все значения с атомарных (они были введены таким образом из SPSS)? А пока попробую.

edit2: проблема не была числовой против атомарной. я перевернул все числовые значения, а целые числа все еще не отображаются.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Как насчет этого?

temp <- df.test%>% group_by (id)%>% filter (time == 0)%>% summarise_all (funs (paste0 (., Collapse = "_")))

Надеюсь, это то, что вы ищете.

1 голос
/ 25 апреля 2019

dplyr::collapse не хочет, чтобы вы этого хотели, читайте ?dplyr::collapse.Вам нужно передать summarise_all функцию, которая выбирает значения, которые вы хотите сохранить из каждой группы.Я здесь делаю вывод, что вы хотите избавиться от всех 0 значений.Хотя здесь это не имеет значения, я также использую first для получения первого значения в каждой группе в каждом столбце, если существует более одного ненулевого значения для предотвращения ошибок.Вы должны проверить свои данные, чтобы убедиться, что у них есть этот макет.

library(dplyr)
tbl <- data.frame(id = rep(99, 5), time = c(rep(0, 3), 3, 6), v1 = c("blk", 0, 0, 2, 3), v2 = c(0, 1, 0, 4, 5), v3 = c(0, 0, 1, 6, 7))
tbl %>%
  group_by(id, time) %>%
  summarise_all(~ .[. != 0] %>% first())
#> # A tibble: 3 x 5
#> # Groups:   id [1]
#>      id  time v1       v2    v3
#>   <dbl> <dbl> <fct> <dbl> <dbl>
#> 1    99     0 blk       1     1
#> 2    99     3 2         4     6
#> 3    99     6 3         5     7

Создано в 2019-04-24 пакетом Представить (v0.2.1)

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