[英]merge when have different levels of by factor R
我想仔細檢查一下。 我正在嘗試將大型數據集合並為較小的數據集。 我的大型數據框的觀測值未包含在小型數據集中。 我無法使用標准代碼與我的數據框進行簡單合並
x<-merge(df1,df2) ###default is all=FALSE.
###output from this code produces a df with 49 rows instead of 13
也用過
x<-merge(df1,df2, by='noms') ##output produces 49 rows instead of 13
經過大量閱讀並檢查了那些經常問這個問題的人,例如合並2個數據框,丟棄不匹配的行,我遇到了這個https://stat.ethz.ch/pipermail/r-help/2006-September/113148.html這表示沒有明確的方法可以解決此問題。
還是這樣嗎? 抱歉,如果已經在某個地方解決了這個問題,我已經嘗試閱讀核心文檔-在stackoverflow上的合並和發布-但現在處在一個松散的結局。
我的dfs在下面
小數據框
noms fruits apple orange kiwi all_comb comb numbers
1 mary apple 1 0 0 1 1 1
2 mary grape 0 0 0 0 1 2
3 mary orange 0 1 0 0 1 3
4 mary apple 1 0 0 1 1 4
5 john banana 0 0 0 0 1 1
6 john apple 1 0 0 1 1 2
7 john apple 1 0 0 1 1 3
8 john apple 1 0 0 1 1 4
9 lucy kiwi 0 0 1 0 1 1
10 lucy orange 0 1 0 0 1 2
11 lucy apple 1 0 0 1 1 3
12 lucy berry 0 0 0 0 1 4
13 tom orange 0 1 0 0 1 1
大數據框
noms age
1 jane 50
2 jane 50
3 jane 50
4 jane 50
5 mary 65
6 mary 65
7 mary 65
8 mary 65
9 john 34
10 john 34
11 john 34
12 john 34
13 pat 65
14 pat 65
15 pat 65
16 lucy 89
17 lucy 89
18 lucy 89
19 lucy 89
20 tom 12
所需的輸出
df
noms fruits apple orange kiwi all_comb comb numbers age
1 mary apple 1 0 0 1 1 1 65
2 mary grape 0 0 0 0 1 2 65
3 mary orange 0 1 0 0 1 3 65
4 mary apple 1 0 0 1 1 4 65
5 john banana 0 0 0 0 1 1 34
6 john apple 1 0 0 1 1 2 34
7 john apple 1 0 0 1 1 3 34
8 john apple 1 0 0 1 1 4 34
9 lucy kiwi 0 0 1 0 1 1 89
10 lucy orange 0 1 0 0 1 2 89
11 lucy apple 1 0 0 1 1 3 89
12 lucy berry 0 0 0 0 1 4 89
13 tom orange 0 1 0 0 1 1 12
如果您使用df2
的唯一行,它將起作用:
merge(df1, unique(df2))
noms fruits apple orange kiwi all_comb comb numbers age
1 john banana 0 0 0 0 1 1 34
2 john apple 1 0 0 1 1 2 34
3 john apple 1 0 0 1 1 3 34
4 john apple 1 0 0 1 1 4 34
5 lucy kiwi 0 0 1 0 1 1 89
6 lucy orange 0 1 0 0 1 2 89
7 lucy apple 1 0 0 1 1 3 89
8 lucy berry 0 0 0 0 1 4 89
9 mary apple 1 0 0 1 1 1 65
10 mary grape 0 0 0 0 1 2 65
11 mary orange 0 1 0 0 1 3 65
12 mary apple 1 0 0 1 1 4 65
13 tom orange 0 1 0 0 1 1 12
這是你想做的嗎?
df_agg <- aggregate(age ~ noms, df_large, max)
merge(df_agg, df_small, by = "noms")
或者如果您不在乎年齡,
df_agg <- data.frame(nom = unique(df_large$noms))
merge(df_agg, df_small, by = "noms")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.