按列分组并折叠所有其他没有 NA 的列
group by a column and collapse all other columns without NA
我有一个数据框,我正试图通过一个名为 "id" 的组列折叠一堆列,
但我得到了很多 NA 值。有没有办法删除 NA,或者在粘贴函数中只使用唯一值?
df<- data.frame(id=c(1, 1, 2, 3, 3, 3),
bar=c('a', 'b', 'a', 'b', 'c', 'NA'),
foo=c('NA', 'b', 'a', 'b', 'NA', 'NA'))
library(plyr)
df %>%
group_by(id) %>%
summarise_all(funs(unique(paste(., collapse = ","))))
我想删除 "NA"...
此外,此函数比基本聚合需要更长的时间,但是我也没有找到聚合函数的正确公式:
aggregate(df, by=list(df$id), paste, collapse=",")
感谢您的帮助!
您可以添加一个 ifelse():
df %>%
group_by(id) %>%
summarise_all(funs(unique(paste(ifelse(is.na(.), "", .), collapse = ","))))
首先将文字 'NA' 值转换为真正的 NA 更安全:
library(dplyr)
df %>%
mutate_all(~replace(., .=='NA', NA)) %>%
group_by(id) %>%
summarize_all(~paste(unique(na.omit(.)), collapse = ','))
输出:
# A tibble: 3 x 3
id bar foo
<dbl> <chr> <chr>
1 1 a,b b
2 2 a a
3 3 b,c b
我有一个数据框,我正试图通过一个名为 "id" 的组列折叠一堆列, 但我得到了很多 NA 值。有没有办法删除 NA,或者在粘贴函数中只使用唯一值?
df<- data.frame(id=c(1, 1, 2, 3, 3, 3),
bar=c('a', 'b', 'a', 'b', 'c', 'NA'),
foo=c('NA', 'b', 'a', 'b', 'NA', 'NA'))
library(plyr)
df %>%
group_by(id) %>%
summarise_all(funs(unique(paste(., collapse = ","))))
我想删除 "NA"... 此外,此函数比基本聚合需要更长的时间,但是我也没有找到聚合函数的正确公式:
aggregate(df, by=list(df$id), paste, collapse=",")
感谢您的帮助!
您可以添加一个 ifelse():
df %>%
group_by(id) %>%
summarise_all(funs(unique(paste(ifelse(is.na(.), "", .), collapse = ","))))
首先将文字 'NA' 值转换为真正的 NA 更安全:
library(dplyr)
df %>%
mutate_all(~replace(., .=='NA', NA)) %>%
group_by(id) %>%
summarize_all(~paste(unique(na.omit(.)), collapse = ','))
输出:
# A tibble: 3 x 3
id bar foo
<dbl> <chr> <chr>
1 1 a,b b
2 2 a a
3 3 b,c b