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
这是我的例子。从这个数据框中,我想创建一个新的数据框,其中包含基于列、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