我想将2个数据框与匹配的列和公共因子合并,但行中的值不同,如下所示:
x <- data.frame(x = c("Uno", "Due", "Tre", "Quattro", "Cinque"), y = c("A", "B", "C", "D", "E"))
x y
1 Uno A
2 Due B
3 Tre C
4 Quattro D
5 Cinque E
y <- data.frame(x = c("Uno", "Tre", "Cinque"), y = c("F", "G", "H"))
x y
1 Uno F
2 Tre G
3 Cinque H
我希望得到:
x y
1 Uno A, F
2 Due B
3 Tre C, G
4 Quattro D
5 Cinque E, H
许多帖子用聚合和数字合并来解决这个问题,我不知道该怎么做字符串。我是否必须使用函数(x等)创建自己的函数?
答案 0 :(得分:3)
如果y
列中的值是字符而非因素,那么使用data.table
x <- data.frame(x = c("Uno", "Due", "Tre", "Quattro", "Cinque"),
y = c("A", "B", "C", "D", "E"),
stringsAsFactors = FALSE)
y <- data.frame(x = c("Uno", "Tre", "Cinque"),
y = c("F", "G", "H"),
stringsAsFactors = FALSE)
(注意stringsAsFactors = FALSE
)
然后(假设你总是做左连接)
library(data.table)
setDT(x)[y, y := toString(c(y, i.y)), on = "x", by = .EACHI]
x
# x y
# 1: Uno A, F
# 2: Due B
# 3: Tre C, G
# 4: Quattro D
# 5: Cinque E, H
这基本上是动态组合两个数据集中的y
列(加入x
列时)并更新y
(不创建新数据集)。
答案 1 :(得分:1)
您可以使用dplyr
x <- data.frame(x = c("Uno", "Due", "Tre", "Quattro", "Cinque"), y = c("A", "B", "C", "D", "E"), stringsAsFactors = F)
y <- data.frame(x = c("Uno", "Tre", "Cinque"), y = c("F", "G", "H"), stringsAsFactors = F)
jdf <- full_join(x,y,"x")
transmute(jdf, x = x, y = ifelse(is.na(y.y),y.x,paste(y.x, y.y, sep=', ')))
x y
1 Uno A, F
2 Due B
3 Tre C, G
4 Quattro D
5 Cinque E, H