[英]Merging rows in R
我想合並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
很多文章通過聚合和合並數字來解決此問題,而我不知道該如何處理字符串。 我必須使用function(x等)來制作自己的函數嗎?
如果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
(不創建新數據集)。
您可以使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.