合并具有多个数据的行 class

Merge rows with multiple data class

我正在尝试 合并 两行,以便输出两全其美。我已经通读了一些使用 ddplyaggregate 的解决方案,但它们仅适用于数字数据。

下面是我正在尝试做的一个例子。

输入:

x <- c("Yemen", 1, NA, NA, 4, 5, "Six")
y <- c("Yemen", NA, "B", 3, NA, 6, "Six")

DF <- as.data.frame(rbind(x,y))
colnames(DF)[1] <- c("CNTRY")

输出

"Yemen", 1, "B", 3, 4, 5, "Six"

关键是CNTRY

理想情况下,如果 xy 不同,我应该能够选择是否保留它们的值。


编辑 1:

解决方案应该适用于本例中的数据框 DF 而不是 x & y。我的数据框有多个重复的帐户,我正在尝试合并所有具有多个实例但共享帐户(密钥)的行。

我们可以使用 dplyr

中的 coalesce 函数
library(dplyr)
coalesce(x,y)
#[1] "Yemen" "1"     "B"     "3"     "4"     "5"     "Six"  

使用 tidyr 包中的填充:

# dummy data with 2 countries to group on
x <- c("Yemen", 1, NA, NA, 4, 5, "Six")
y <- c("Yemen", NA, "B", 3, NA, 6, "Six")
xx <- c("XXX", 3, NA, 33, 4, 7, "Four")
yy <- c("XXX", 2, "B", NA, NA, NA, NA)
DF <- as.data.frame(rbind(x,y,xx,yy))
colnames(DF)[1] <- c("CNTRY")

# using tidyr fill function up and down
library(dplyr)
library(tidyr)

DF %>% group_by(CNTRY) %>% 
  fill_(colnames(DF), .direction = "down") %>% 
  fill_(colnames(DF), .direction = "up") %>% 
  slice(1)

# Source: local data frame [2 x 7]
# Groups: CNTRY [2]
# 
#    CNTRY     V2     V3     V4     V5     V6     V7
#   <fctr> <fctr> <fctr> <fctr> <fctr> <fctr> <fctr>
# 1    XXX      3      B     33      4      7   Four
# 2  Yemen      1      B      3      4      5    Six