合并具有多个数据的行 class
Merge rows with multiple data class
我正在尝试 合并 两行,以便输出两全其美。我已经通读了一些使用 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
& 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
我正在尝试 合并 两行,以便输出两全其美。我已经通读了一些使用 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
& 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