为了查明是否数据帧df.a是数据帧的一个子集df.b我做了以下内容:

df.a <- data.frame( x=1:5, y=6:10 )
df.b <- data.frame( x=1:7, y=6:12 )
inds.x <- as.integer( lapply( df.a$x, function(x) which(df.b$x == x) ))
inds.y <- as.integer( lapply( df.a$y, function(y) which(df.b$y == y) ))
identical( inds.x, inds.y )

最后一行给出TRUE ,因此df.a包含在df.b

现在我想知道是否有一种更优雅 - 可能更有效 - 的方式来回答这个问题?

此任务也很容易扩展,以找到两个给定数据帧之间的交集,可能仅基于列的子集。

将非常感谢帮助。

#1楼 票数:0 已采纳

我想猜一个答案。

我觉得semi_joindplyr会做你想做的,即使考虑到重复行。

首先注意帮助文件?semi_join

从x返回所有行,其中y中存在匹配值,仅保留x中的列。

半连接与内连接不同,因为内连接将为y的每个匹配行返回一行x,其中半连接将永远不会复制x的行。

好的,这表明以下内容应该正确失败:

df.a <- data.frame( x=c(1:5,1), y=c(6:10,6) )
df.b <- data.frame( x=1:7, y=6:12 )
identical(semi_join(df.b, df.a),  semi_join(df.a, df.a))

这是FALSE ,正如预期的那样

> semi_join(df.b, df.a)
Joining by: c("x", "y")
  x  y
1 1  6
2 2  7
3 3  8
4 4  9
5 5 10

但是,以下内容应通过:

df.c <- data.frame( x=c(1:7, 1), y= c(6:12, 6) )
identical(semi_join(df.c, df.a), semi_join(df.a, df.a))

它确实如此,给予TRUE

第二个semi_join(df.a, df.a)需要在df.a上进行规范排序。

  ask by user3139868 translate from so

未解决问题?本站智能推荐:

1回复

如何有效地为列表中的大型data.frame对象进行子集化?

我在列表中有data.frame对象,我将根据每个的最后一列(AKA,得分)过滤掉。 列表的子集对我来说很直观,但我希望有两个不同的集合(即通过/失败)作为每个data.frame对象的过滤结果。 我认为我使用的方式并不优雅,并寻求更好/更有效的解决方案。 谁能指出我如何为这类任务实现更优
1回复

R中data.frame的条件子集

我在这里有一个data.frame 。 我想知道如何才能为变量control为FALSE并按字母顺序根据BASE R中的 D$study.name 按字母顺序排列 data.frame中行的子集命名为dot.names ( 请参见下文 )? 这是我没有成功使用的代码:
1回复

基于另一个锯齿状data.frame的data.frame的有效子集

我正在一个项目中,需要根据属性的不同组合重复子集data.frame。 现在,我正在使用合并功能对data.frame进行子集设置,因为我不知道运行时输入的属性是什么,并且可以正常工作。 但是,我想知道是否有更快的方法来创建子集。
1回复

使用R中的列表对data.frame进行子集化有时有效,但并非总是如此?

我正在尝试使用另一个数据框 (file2) 的行名对 R 中的 data.frame (file1) 进行子集化。 file2 中的总行数是 166,如果我进一步子集它会减少到 50。现在这里是有趣的部分:如果我在子集之后使用 file2 的行名(50 行),创建一个包含 50 个字符的列表,然后
2回复

如何在R中的同一data.frame中按行子集data.frame?

我想我的子集,以便data.frame它只会返回他们的值的至少50%的行<=在data.frame特定行的值。 df 我尝试作为子集的特定行是r1行。 我只想返回r3行,因为75%的值<= r1行中的值。 df 任何帮助将不胜感激。 请让我知道是否需要更多信息。
1回复

在R中,如何通过另一个data.frame中的值来子集data.frame?

我有两个数据框。 第一个df.1包含两df.1对的数字标识符,其中每列包括约100,000行。 第二数据帧df.2包括一列( df.2$C )数字标识符。 该数据帧大约有200行。 如何找到df.1的数据配对子集,其中仅包含具有df.2$C标识符值的行? 最终子集将包括df.1的配
1回复

R:如何在列表中对data.frame进行子集化并返回data.frame?

在对列表中的data.frame进行子集化时,我得到向量而不是data.frames(参见下面的示例)。 如何避免这种情况并获取data.frames? 产量
1回复

在R中子集一个data.frame

我有一个数据框 现在我想得到一个仅包含比赛=网球之类的数据框 如何使用R语言提取仅包含游戏=网球的数据框?