我有一个如下所示的数据框:
id=c(3, 3, 4, 5, 5)
a_2015 =c("abc", NA, NA, "abc", NA)
a_2016 = c("NA", "def", "abc", NA, "abc")
df = data.frame(id, a_2015, a_2016)
df
id a_2015 a_2016
1 3 abc NA
2 3 NA def
3 4 NA abc
4 5 abc NA
5 5 NA abc
这意味着如果列a_2015是一个条目而不是a_2016中的NA,或者反之亦然。因此,在a_2015和a_2016两列中,您永远不能在同一行中包含有效条目。
我想聚合数据框,如
id a_2015 a_2016
3 abc def
4 NA abc
5 abc abc
我试图用聚合来解决它,但现在我觉得我需要像申请这样的东西,或者?我很感谢任何提示!
答案 0 :(得分:0)
我们可以使用
library(data.table)
setDT(df)[, lapply(.SD, function(x) x[!is.na(x)]), id][]
setDT(df)[, lapply(.SD, function(x) x[!is.na(x)]), id][]
# id a_2015 a_2016
#1: 3 abc def
#2: 4 NA abc
#3: 5 abc abc
id=c(3, 3, 4, 5, 5)
a_2015 =c("abc", NA, NA, "abc", NA)
a_2016 = c(NA, "def", "abc", NA, "abc")
df = data.frame(id, a_2015, a_2016)
答案 1 :(得分:0)
您也可以使用dplyr
:
library(tidyverse)
df %>%
group_by(id) %>%
summarise(tmp=paste(a_2015, a_2016, collapse = "")) %>%
mutate(tmp=gsub("NANA ", "", tmp)) %>%
separate(tmp, into = c("a_2015", "a_2016"), sep = " ")
# A tibble: 3 x 3
id a_2015 a_2016
* <dbl> <chr> <chr>
1 3 abc def
2 4 NA abc
3 5 abc abc
甚至基地R:
aggregate(df[,-1], list(df$id), function(x) gsub("NA", "", paste0(x, collapse = "")))
Group.1 a_2015 a_2016
1 3 abc def
2 4 abc
3 5 abc abc
然后,您必须将""
替换为NA
并编辑同名。