簡體   English   中英

合並R中的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM