R 中是否有一个函数可以让我创建一个新的数据框,其中包含来自第一个数据框的重复值?

Is there a function in R that will let me create a new data frame that contains the duplicated values from the first data frame?

这是我的例子。从这个数据框中,我想创建一个新的数据框,其中包含基于列、mgb 和列中的匹配项的行,tsg 从而省略其他行。

mbr  mbg tsr tsg
1   1   g1   3  g4
2   2   g2   4  g3
3   3   g3   5  g2
4   4   g4   6  g1
5   5   g5   7  g5
6  NA <NA>   1  g6
7  NA <NA>   2  g7

理想情况下 return 这个数据框:

mbr  mbg tsr tsg
1   1   g1   3  g4
2   2   g2   4  g3
3   3   g3   5  g2
4   4   g4   6  g1
5   5   g5   7  g5

到目前为止我已经尝试过:

1) intersect(df$mbg,df$tsg) 但只有 return 列之间的匹配列表,例如g1、g2 等...

2) df2<-[intersect(df$mbg,df$tsg),]

这是return这个:

     mbr  mbg tsr  tsg
NA    NA <NA>  NA <NA>
NA.1  NA <NA>  NA <NA>
NA.2  NA <NA>  NA <NA>
NA.3  NA <NA>  NA <NA>
NA.4  NA <NA>  NA <NA>

我是 R 的新手,正在尝试自学,所以任何建议都会很棒。谢谢!

如果您只想删除 NA 并写入新数据框:

complete.df <- na.omit(df) 

假设我正确地解释了您要查找的内容,那么您似乎在正确的轨道上,只是 运行 语法问题。试试这个

df2<-df[df$mbg %in% intersect(df$mbg,df$tsg),]

intersect(df$mbg, df$tsg) 返回出现在这两列中的值。在括号之前添加 df 标识您想要的数据框的子集,您之前丢失了,并且 df$mbg %in% 部分表示您希望包含 mbg 值的行包含在交集中。

你甚至不需要 intersect 块。

df2 <- df1[df1$mbg %in% df1$tsg, ]

%in% 运算符将 return TRUE/FALSE 的向量,以确定 mbg 中的每个元素是否被发现(或相交) tsg

中的值

或者,使用 dplyr 库(如果您是 R 的新手,我建议您学习)

library(dplyr)

df2 <- filter(df1, mbg %in% tsg) 
library(dplyr)

df %>% 
  semi_join(df, c('mbg' = 'tsg'))

#   mbr mbg tsr tsg
# 1   1  g1   3  g4
# 2   2  g2   4  g3
# 3   3  g3   5  g2
# 4   4  g4   6  g1
# 5   5  g5   7  g5