亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

合并兩個數據幀,同時保持原始行順序

合并兩個數據幀,同時保持原始行順序

暮色呼如 2019-12-26 14:03:23
我想合并兩個數據框,以保持其中一個的原始行順序(df.2在下面的示例中)。以下是一些示例數據(class列中的所有值都在兩個數據幀中定義):df.1 <- data.frame(class = c(1, 2, 3), prob = c(0.5, 0.7, 0.3))df.2 <- data.frame(object = c('A', 'B', 'D', 'F', 'C'), class = c(2, 1, 2, 3, 1))如果我做:merge(df.2, df.1)輸出為:  class object prob1     1      B  0.52     1      C  0.53     2      A  0.74     2      D  0.75     3      F  0.3如果我添加sort = FALSE:merge(df.2, df.1, sort = F)                                                        結果是:  class object prob1     2      A  0.72     2      D  0.73     1      B  0.54     1      C  0.55     3      F  0.3但是我想要的是:  class object prob1     2      A  0.72     1      B  0.53     2      D  0.74     3      F  0.3    5     1      C  0.5
查看完整描述

3 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

您只需要創建一個在df.2中給出行號的變量即可。然后,一旦合并了數據,就可以根據此變量對新數據集進行排序。這是一個例子:


df.1<-data.frame(class=c(1,2,3), prob=c(0.5,0.7,0.3))

df.2<-data.frame(object=c('A','B','D','F','C'), class=c(2,1,2,3,1))

df.2$id  <- 1:nrow(df.2)

out  <- merge(df.2,df.1, by = "class")

out[order(out$id), ]


查看完整回答
反對 回復 2019-12-26
?
慕容森

TA貢獻1853條經驗 獲得超18個贊

您還可以inner_join在Hadley的dplyr程序包中(在的下一個迭代中plyr)檢查該函數。它保留了第一個數據集的行順序。與所需解決方案的微小區別在于,它還保留了第一個數據集的原始列順序。因此,它不一定會將我們用于合并的列放在第一個位置。


使用上面的示例,inner_join結果如下所示:


inner_join(df.2,df.1)

Joining by: "class"

  object class prob

1      A     2  0.7

2      B     1  0.5

3      D     2  0.7

4      F     3  0.3

5      C     1  0.5


查看完整回答
反對 回復 2019-12-26
  • 3 回答
  • 0 關注
  • 616 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號