我有一个数据集,其中有多行都对应于基线度量。我想通过记录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:问题不是数字还是原子。我将所有内容都设为数字,但整数仍然不显示。
答案 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 =“ _”)))
希望这就是您想要的。