合并具有多个数据类

时间:2017-01-23 21:28:48

标签: r dataframe dplyr plyr tidyverse

我正在尝试合并两行,以便输出两者都是最好的。我已使用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&amp; y。我的数据框有多个重复的帐户,我正在尝试合并具有多个实例但共享帐户(密钥)的所有行。

2 个答案:

答案 0 :(得分:2)

我们可以使用coalesce

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

答案 1 :(得分:0)

使用来自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