纵向数据集中的行折叠

时间:2019-04-24 21:48:12

标签: r dplyr tidyverse tidyr longitudinal

我有一个数据集,其中有多行都对应于基线度量。我想通过记录ID折叠这些行,以便每个人只有一行用于基准度量。这意味着我必须折叠所有变量,其中一些是字符变量。我该怎么做呢?这是我尝试过的:

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的行都通过id合并信息,以便每个唯一ID的时间都为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的整数值,但整数全部消失了-这是因为如果结构是原子的,则无法读取整数吗?

结论:我想我需要更改atomic的所有值(它们从SPSS引入r)?同时,我将尝试这种方式。

edit2:问题不是数字还是原子。我将所有内容都设为数字,但整数仍然不显示。

2 个答案:

答案 0 :(得分:1)

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

reprex package(v0.2.1)于2019-04-24创建

答案 1 :(得分:1)

怎么样?

temp <-df.test%>%group_by(id)%>%filter(time == 0)%>%summarise_all(funs(paste0(。,collapse =“ _”)))

希望这就是您想要的。