根据R中的多个ID组合行值
我有dataFrame df ,其中显示了一个样本。我需要通过 study_id , lab_study_dt 和 lab_study_time 组合行,并在实验室中具有Na和非NA值,并在检测限制由这三个关键变量分组的同一行。
我已经尝试了小组,并摘要来做这件事,但没有得到我想要的结果。
df %>%
group_by(study_id,lab_study_dt,lab_study_time) %>%
summarise_all(funs(toString(na.omit(.))))
study_id | lab_study_dt | lab_study_time | lab_polys | lab_lymphs | lab_mono | lab_eos | lab_basos | lab_bands | lab_wbc_count | lab_rbc_count | protein_limit_of_detection | lab_protein | gluc_limit_of_detection | lab_glucose |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Jane | 8/13/2011 | 0:12 | NA | NA | NA | NA | NA | NA | 1 | NA | NA | NA | Na | Na |
Jane | 8/13/2011 | 0:12 | Na | na | na | na | na | na na | na | na na | na | na | na na | na na |
jane | 3/4/2013 | 15:27 | Na Na | Na Na Na Na Na Na | Na | Na Na | Na | Na Na Na | Na | Na | Na Na | Na | Na Na | Na |
Jane | 3/4/2013 | 15:27 | NA | NA | NA | NA | NA | Na Na | Na | NA NA | NA NA NA NA | NA | NA | NA NA |
JANE | 3/4/2013 | 15:27 | 8 | Na Na | NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA | Na Na Na | Na | Na Na | Na Na | Na Na | NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA | Na Na Na | Na | na na |
Jane | 3/4/2013 | 15:27 | NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA | NA NA NA NA NA NA NA NA NA NA | na | na | na | 1 | na na | na | na | na | na | jane |
3/4/2013 | 15:27 | na | na | na | na na na | na | na | na na na na na na | na | na | na | na | jane | 3/4/2013 |
na na na na na | 15:27 | na | na | na na | na na na na na na | na | na na | na na | na na | na | 156 | na | Na | Na |
George | 4/20/2021 | 21:18 | NA | NA NA NA | NA | NA | NA | NA | NA | NA NA | NA NA | NA NA NA NA NA NA | NA NA | NA |
GEORGE | 4/20/2021 | 21:18 | NA | NA NA | NA NA NA | NA NA NA | NA NA NA NA | NA NA NA | NA NA | GEORGE | NA NA NA | NA | NA NA | NA |
NA NA NA NA | 4/23/2021 | 15:27 | 8 | NA | NA | NA | NA | NA | NA | NA NA | NA | NA NA | 2 | 3 |
GEORGE | 4/23/2021 | 12:27 | NA | NA | NA | NA NA | NA NA NA | NA NA NA | NA NA | NA NA NA | 1 | > 10 | NA | NA NA |
GEORGE | 4/23/2021 | 12 :27 | na | na | na | na | 149 | na | 31 | na | na | na | na na | na |
george | 4/23/2021 | 12:27 | na na | na na na na na | na | na na na na na na na na na | na na | na | na na na | na na na na na na na na na na na na | na | na | na na | a |
na na na na na na na na na na na na na na na na na 根据唯一的study_id,研究日期和研究时间,以及该行沿线的所有相关值。 So for example, entry Jane - 3/4/2013 - 15:27 would look like below:
study_id | lab_study_dt | lab_study_time | lab_polys | lab_lymphs | lab_mono | lab_eos | lab_basos | lab_bands | lab_wbc_count | lab_rbc_count | protein_limit_of_detection | lab_protein | gluc_limit_of_detection | lab_glucose |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
jane | 3/4/2013 | 15:27 | 8 | 60 | 31 | na | 149 | na | 1000 | 156 | na | na | na | na |
谢谢
I have dataframe df of which a sample is shown below. I need to combine the rows by study_id, lab_study_dt, and lab_study_time, and have NA and non-NA values across labs and detection limits on the same row grouped by those three key variables.
I've tried group by and summarise_all to do this but didn't get the outcome I'm looking for.
df %>%
group_by(study_id,lab_study_dt,lab_study_time) %>%
summarise_all(funs(toString(na.omit(.))))
study_id | lab_study_dt | lab_study_time | lab_polys | lab_lymphs | lab_mono | lab_eos | lab_basos | lab_bands | lab_wbc_count | lab_rbc_count | protein_limit_of_detection | lab_protein | gluc_limit_of_detection | lab_glucose |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Jane | 8/13/2011 | 0:12 | NA | NA | NA | NA | NA | NA | 1 | NA | NA | NA | NA | NA |
Jane | 8/13/2011 | 0:12 | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
Jane | 3/4/2013 | 15:27 | NA | 60 | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
Jane | 3/4/2013 | 15:27 | NA | NA | NA | NA | NA | NA | NA | 10000 | NA | NA | NA | NA |
Jane | 3/4/2013 | 15:27 | 8 | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
Jane | 3/4/2013 | 15:27 | NA | NA | NA | NA | NA | 1 | NA | NA | NA | NA | NA | NA |
Jane | 3/4/2013 | 15:27 | NA | NA | NA | NA | NA | NA | 149 | NA | NA | NA | NA | NA |
Jane | 3/4/2013 | 15:27 | NA | NA | 31 | NA | NA | NA | NA | NA | 1 | 56 | NA | NA |
George | 4/20/2021 | 21:18 | NA | 60 | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |
George | 4/20/2021 | 21:18 | NA | NA | NA | NA | NA | NA | NA | 10000 | NA | NA | NA | NA |
George | 4/23/2021 | 15:27 | 8 | NA | NA | NA | NA | NA | NA | NA | NA | NA | 2 | 3 |
George | 4/23/2021 | 12:27 | NA | 65 | NA | NA | NA | NA | NA | NA | 1 | >10 | NA | NA |
George | 4/23/2021 | 12:27 | NA | NA | NA | NA | NA | 1 | 149 | NA | NA | NA | NA | NA |
George | 4/23/2021 | 12:27 | NA | NA | 31 | NA | NA | NA | NA | 56 | NA | NA | NA | NA |
The end dataframe would have one row per unique study_id, study date, and study time together, with all associated values along that row. So for example, entry Jane - 3/4/2013 - 15:27 would look like below:
study_id | lab_study_dt | lab_study_time | lab_polys | lab_lymphs | lab_mono | lab_eos | lab_basos | lab_bands | lab_wbc_count | lab_rbc_count | protein_limit_of_detection | lab_protein | gluc_limit_of_detection | lab_glucose |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Jane | 3/4/2013 | 15:27 | 8 | 60 | 31 | NA | NA | 1 | 149 | 1000 | 1 | 56 | NA | NA |
Thank you in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我们可以按
id/dt/time
进行分组,然后在所有列上使用tidyr :: fill
(即非NA值并首先通过任何NAS将其复制,然后通过任何NAS(“ Downup”,我的任意选择)。最后,我们只能将第一个切片保留在每个组中,然后删除分组。这是您期望的输出吗?
We could group by the
id/dt/time
, then usetidyr::fill
on all columns (ieeverything()
) to take any non-NA values and copy them first down through any NAs and then up though any NAs ("downup", my arbitrary choice). Finally, we can keep just the first slice within each group and then remove the grouping.Is this the output you'd expect?