[英]merge two dataframes R
我想在R中合並兩個數據幀。我想將df2添加到df,以便保持df的長度,即刪除任何不匹配的行。 我需要屬於每個人的最小負整數始終匹配'month1',與month2匹配的第二個最小整數,與第3個月匹配的第三個最小整數,依此類推。
DF
names variable
1 jane -4
2 jane -3
3 jane -2
4 john -5
5 john -4
6 john -3
7 john -2
8 john -1
9 john 1
10 john 2
11 mary -3
12 mary -2
13 mary -1
14 mary 1
15 mary 2
16 mary 3
17 mary 4
18 tom -6
19 tom -5
20 tom -4
21 tom -3
22 tom -2
23 tom -1
24 tom 1
df2
noms months
1 jane month1
2 jane month2
3 jane month3
4 jane month4
5 jane month5
6 jane month6
7 jane month7
8 jane month8
9 jane month9
10 jane month10
11 john month1
12 john month2
13 john month3
14 john month4
15 john month5
16 john month6
17 john month7
18 john month8
19 john month9
20 john month10
21 mary month1
22 mary month2
23 mary month3
24 mary month4
25 mary month5
26 mary month6
27 mary month7
28 mary month8
29 mary month9
30 mary month10
31 tom month1
32 tom month2
33 tom month3
34 tom month4
35 tom month5
36 tom month6
37 tom month7
38 tom month8
39 tom month9
40 tom month10
期望的輸出
names variable months
1 jane -4 month1
2 jane -3 month2
3 jane -2 month3
4 john -5 month1
5 john -4 month2
6 john -3 month3
7 john -2 month4
8 john -1 month5
9 john 1 month6
10 john 2 month7
11 mary -3 month1
12 mary -2 month2
13 mary -1 month3
14 mary 1 month4
15 mary 2 month5
16 mary 3 month6
17 mary 4 month7
18 tom -6 month1
19 tom -5 month2
20 tom -4 month3
21 tom -3 month4
22 tom -2 month5
23 tom -1 month6
24 tom 1 month7
看來這應該是簡單的合並,但是代碼對我不起作用。 這就是我嘗試過的
final <- merge(df, df2, by.x = "names", by.y = "noms", sort=F,all.x=T,all.y=F)
也嘗試過這個
x<-df2$names %in% df$noms
y<-cbind(df2, x)
matches<-y[y$x!=FALSE,]
我確定這是一個基本問題,但是我的簡單合並代碼無法正常工作。 預先感謝您的任何幫助。
這是另一種方法:
tab <- table(df$names) # count rows per name
# create vector with months
tmp <- unlist(lapply(names(tab), function(x) {
head(df2$months[as.character(df2$noms) == x], tab[x])
}))
# create new data frame
final <- cbind(df, months = tmp)
結果:
names variable months
1 jane -4 month1
2 jane -3 month2
3 jane -2 month3
4 john -5 month1
5 john -4 month2
6 john -3 month3
7 john -2 month4
8 john -1 month5
9 john 1 month6
10 john 2 month7
11 mary -3 month1
12 mary -2 month2
13 mary -1 month3
14 mary 1 month4
15 mary 2 month5
16 mary 3 month6
17 mary 4 month7
18 tom -6 month1
19 tom -5 month2
20 tom -4 month3
21 tom -3 month4
22 tom -2 month5
23 tom -1 month6
24 tom 1 month7
使用數據表的方法:
library(data.table)
dt <- data.table(df)
dt[,months:=paste0("month",row(dt)[,1]),by=names]
head(dt,10)
# names variable months
# 1: jane -4 month1
# 2: jane -3 month2
# 3: jane -2 month3
# 4: john -5 month1
# 5: john -4 month2
# 6: john -3 month3
# 7: john -2 month4
# 8: john -1 month5
# 9: john 1 month6
# 10: john 2 month7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.