我有以下数据库。
d <- data.frame(x=c("abc", "abc"), y=c("","R"), z=c("J",""))
如何通过忽略空单元格并将输出放在一行来压缩数据?
答案 0 :(得分:1)
一种选择是将空白元素更改为NA
,转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(d)
),按&#39; x&#39;分组,我们删除每列中的NA值(na.omit
- 假设每列有相同数量的NA&#39; s)
library(data.table)
is.na(d) <- d==''
setDT(d)[, lapply(.SD, na.omit), by = x]
# x y z
#1: abc R J
或dplyr
library(dplyr)
d %>%
mutate_each(funs(replace(., .=='', NA)), y:z) %>%
group_by(x) %>%
summarise_each(funs(na.omit(.)), y:z)
# x y z
# (fctr) (fctr) (fctr)
#1 abc R J