Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用另一个R数据帧的值来子集一个R数据帧?_R_Dataframe - Fatal编程技术网

如何用另一个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-

我在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
.....
我想对
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]