簡體   English   中英

如何使用另一個R數據幀的值對一個R數據幀進行子集化?

[英]How to subset one R dataframe with the values of another R dataframe?

我在R中有兩個數據幀:

Died.At <- c(22,40,72,41, ...)
Writer.At <- c(16, 18, 36, 36)
Name <- c("John Doe", "Edgar Poe", "Walt Whitman", "Jane Austen", ...)
Gender <- c("MALE", "MALE", "MALE", "FEMALE", ...)
Date.Of.Death <- c("2015-05-10", "1849-10-07", "1892-03-26","1817-07-18", ...)
Pet <- c("cat", "dog", "cat", "cat")
df1 = data.frame(Died.At, Writer.At, Name, Gender, Pet)
print(df1)
  Died.At Writer.At     Name          Gender    Pet
1      22        16     John Doe      MALE      cat
2      40        18     Edgar Poe     MALE      dog
3      72        36     Walt Whitman  MALE      cat
4      41        36     Jane Austen   FEMALE    cat
.....

df1Name每一行都不是唯一的(即有多個行具有相同的作者。)

第二個數據幀df2 ,還有一個Name其中包含來自df1兩位作者(例如Jane Austen)和全新的作者。 這個數據框架也要大得多。

print(length(unique(df1$Name)))
## output 1168
print(length(unique(df2$Name)))
## output 5572

我想將df2子集化,使得唯一的名稱是來自df1的名稱。

我的想法是這樣做:

subset_df2 = df2[df2$Name == unique(df1$Name)]

但是,我希望這里有1168個獨特的作者姓名:

print(length(unique(subset_df2$Name)))
## output 880

這比我預期的要少。 我的錯誤在哪里?

您可以df2$Name %in% df1$Name中使用match(df2$Name, df1$Name)df2$Name %in% df1$Name ,返回df2 $ Name長度的邏輯向量,邏輯TRUE,其中df2 $ Name在df1 $ Name中。 然后,您可以使用它來索引df2。

subset_df2 <- df2[df2$Name %in% df1$Name, ]

?match

至於為什么你的代碼不起作用,請參閱本練習的輸出:

a = LETTERS[sample(1:10, size=15, replace=T)]
b = c(unique(a), LETTERS[15:30])
# compare
b == unique(a) 
b[b == unique(a)]
# vs
b %in% a
b[b %in% a]

另請注意b %in% a不等於a %in% b ,因此b[a %in% b]將產生不正確的結果。

此外,在索引數據框時,您需要提供行范圍和列范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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