r语言 - 如何比较两列并删除不重叠的元素



我在两个数据框中有两列,其中较长的一列包含另一列的所有元素。现在我想删除较长列中不与其他列重叠的元素以及相应的行。我使用以下方法确定了"差异":

diff <- setdiff(gdp$country, tfpg$country)

我尝试使用两个 FOR 循环来完成此操作:

for (i in 1:28) { for(j in 1:123) {if(diff[i] == gdp$country[j]) {gdp <- gdp[-c(j),]}}}

其中 28 是我要删除的行数(diff 的长度),123 是较长列的长度。这不起作用,错误消息:

Error in if (diff[i] == gdp$country[j]) { : 
  missing value where TRUE/FALSE needed

那么我该如何解决这个问题呢?或者有更好的方法可以做到这一点吗?

谢谢。


我这里有一个名为"gdp"的数据框:

  country  wto   y1990   y1991   y1992
Austria 1995  251540  260197  265644
Belgium 1995  322113  328017  333038
Cyprus 1995   14436   14537   15898
Denmark 1995  177089  179392  182936
Finland 1995  149584  140737  136058
France 1995 1804032 1822778 1851937

有 123 行。我想删除在另一个向量中指定国家/地区名称的行:

diff ["Austria","China",...,"Yemen"]

更好的方法! 您所描述的等效于左联接或内部联接。 但是实现它的方法是使用合并命令:

## S3 method for class 'data.frame'
merge(x, y, by = intersect(names(x), names(y)),
  by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
  sort = TRUE, suffixes = c(".x",".y"),
  incomparables = NULL, ...)

在您的情况下:

merge(gdp, tfpg, by = intersect('country', 'country'))

例如

x = data.frame(foo = c(1,2,3,4,5), bar=c("A","B","C","D","E"))
y = data.frame(baz = c(6,7,8,9), bar=c("A","C","E","F"))
z = merge(x,y,by=intersect('bar','bar'))

  bar foo baz
1   A   1   6
2   C   3   7
3   E   5   8

相关内容

  • 没有找到相关文章

最新更新