我正在尝试合并两行,以便输出两者都是最好的。我已使用ddply
或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
理想情况下,我应该可以选择是否保留x
或y
的值,如果它们不同的话。
修改1:
此解决方案应该适用于此示例中的数据框DF
,而不是x
&amp; y
。我的数据框有多个重复的帐户,我正在尝试合并具有多个实例但共享帐户(密钥)的所有行。
答案 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