0

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

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

输入:

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。我的数据框有多个重复的帐户,我正在尝试合并具有多个实例但共享帐户(键)的所有行。

4

2 回答 2

2

We can use coalesce function from dplyr

library(dplyr)
coalesce(x,y)
#[1] "Yemen" "1"     "B"     "3"     "4"     "5"     "Six"  
于 2017-01-23T21:33:12.360 回答
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
于 2017-01-24T08:32:53.340 回答