R编码非常新,我一直在尝试使用dplyr中的group_by格式化/合并df中的行。但是,我还没到那儿。
这是我的数据表的简化。前三个条目共享相同的id,最后两个条目共享相同的id。
ID Assay1 Assay2 Assay3 Assay4 Assay5
13,12 Months,<=-65C 12 NA NA NA NA
13,12 Months,<=-65C NA 11 NA NA NA
13,12 Months,<=-65C NA NA 33 NA NA
09,06 Months,<=-65C 112 NA NA NA NA
09,06 Months,<=-65C NA 115 NA NA NA
我想实现以下目标:
ID Assay1 Assay2 Assay3 Assay4 Assay5
13,12 Months,<=-65C 12 11 33 NA NA
09,06 Months,<=-65C 112 115 NA NA NA
这样,AssayValueX中的值每个唯一ID合并为一行。我已经使用了group_by总结,但我不想要总结......我想要一个新的df与合并的行!如果其他功能更适合实现这一目标,请告诉我。
答案 0 :(得分:3)
您可以使用dplyr
和zoo
df %>%
group_by(ID) %>%
mutate_each(funs(na.locf(., na.rm = FALSE, fromLast = FALSE)))%>%filter(row_number()==n())
ID Assay1 Assay2 Assay3 Assay4 Assay5
13,12 Months,<=-65C 12 11 33 NA NA
09,06 Months,<=-65C 112 115 NA NA NA
修改强>
为你添加问题
数据:
ID Assay1 Assay2 Assay3 Assay4 Assay5
1 13,12 Months,<=-65C 12 13 NA NA NA
2 13,12 Months,<=-65C 11 11 999 NA NA
3 13,12 Months,<=-65C NA NA 33 NA NA
4 09,06 Months,<=-65C 112 NA NA NA NA
5 09,06 Months,<=-65C NA 115 NA NA NA
<强>解决方案强>
df=df %>%
group_by(ID) %>%
summarise_all(funs(toString(na.omit(.))))
df[df=='']=NA
> df
ID Assay1 Assay2 Assay3 Assay4 Assay5
<chr> <chr> <chr> <chr> <chr> <chr>
1 09,06 Months,<=-65C 112 115 <NA> <NA> <NA>
2 13,12 Months,<=-65C 12, 11 13, 11 999, 33 <NA> <NA>
答案 1 :(得分:2)
这是一个tidyr
解决方案。对于您的示例数据,没有Assay4和Assay5数据,因为它们是NA
,但它应该与您的实际数据一起使用。基本上,理由是gather
数据,删除NA并再次spread
。
library(tidyr)
df%>%
gather(Assay, value,-ID)%>%
filter(!is.na(value))%>%
spread(Assay,value)
ID Assay1 Assay2 Assay3
1 09,06 Months,<=-65C 112 115 NA
2 13,12 Months,<=-65C 12 11 33
数据强>
df <- read.table(text="ID Assay1 Assay2 Assay3 Assay4 Assay5
'13,12 Months,<=-65C' 12 NA NA NA NA
'13,12 Months,<=-65C' NA 11 NA NA NA
'13,12 Months,<=-65C' NA NA 33 NA NA
'09,06 Months,<=-65C' 112 NA NA NA NA
'09,06 Months,<=-65C' NA 115 NA NA NA",
header=TRUE,stringsAsFactors=FALSE)
答案 2 :(得分:1)
通过dplyr
,
library(dplyr)
df %>%
group_by(ID) %>%
summarise_all(funs(sum(., na.rm = TRUE))) %>%
mutate_all(funs(replace(., . == 0, NA)))
# A tibble: 2 x 6
# ID Assay1 Assay2 Assay3 Assay4 Assay5
# <fctr> <int> <int> <int> <int> <int>
#1 09,06_Months,<=-65C 112 115 NA NA NA
#2 13,12_Months,<=-65C 12 11 33 NA NA