簡體   English   中英

當具有不同水平的因子R時合並

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

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