-1

我有一个数据集,其中有多行都对应于基线度量。我想按记录 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))

我不知道 summarise 是否适合在这里使用。基本上我遇到的一个问题是字符的总和,我认为这就是为什么汇总不起作用。理想情况下,我真正想做的就是将时间 = 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 的)?在此期间我会试试这个。

编辑2:问题不是数字与原子。我把所有的数字都变成了数字,整数仍然没有出现。

4

2 回答 2

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 包(v0.2.1)于 2019 年 4 月 24 日创建

于 2019-04-24T23:25:10.840 回答
1

这个怎么样?

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

希望这是您正在寻找的。

于 2019-04-25T08:23:19.887 回答