如何用另一个R数据帧的值来子集一个R数据帧?
我在R中有两个数据帧:如何用另一个R数据帧的值来子集一个R数据帧?,r,dataframe,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-
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
.....
我想对df2
进行子集划分,以便只有df1
中的名称
我的想法是这样做:
subset_df2 = df2[df2$Name == unique(df1$Name)]
但是,我预计这里会有1168个唯一的作者姓名:
print(length(unique(subset_df2$Name)))
## output 880
这比我预想的要少。我的错误在哪里 您可以在%df1$Name中使用match(df2$Name,df1$Name)
或df2$Name%,返回逻辑向量df2$Name的长度,如果df2$Name在df1$Name中,则返回逻辑TRUE。然后可以使用它来索引df2
subset_df2 <- df2[df2$Name %in% df1$Name, ]
注意%a中的b%不等同于%b中的a%
,因此b[a%b]
将产生不正确的结果
此外,在为数据帧编制索引时,您需要提供行范围和列范围。此语句中存在不一致之处“列名中的每个值都是唯一的。但是,在df1中,并非每一行都是唯一的(即,有多行具有相同的作者)。”如果df1中的每一行都不唯一,并且某些行具有相同的作者,从名称构造df1时,名称如何唯一。您的代码中还有First.Name和Second.Name,但它们没有出现在df1中?@R.S.我编辑了上面的内容---谢谢。subset\u-df2似乎在subset\u-df2=df2[df2$Name%在%df1$Name中]
和subset\u-df2=df2[df2$Name%在%df1$Name中,]
之间没有区别。这是正确的吗?您在注释中键入了完全相同的内容,但如果您的意思是match
和%in%
,是的,它们是相同的,请参阅?match
的帮助文件,以及在详细信息下%in%
如何定义为%in%“0
<代码>字母
或字母
是字母表向量R中内置的常量,请参见?字母
。
subset_df2 <- df2[df2$Name %in% df1$Name, ]
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]