如果第1列中的文本等于第2列中的文本(在r中),则从Dataframe中删除行

时间:2017-05-08 20:34:08

标签: r dataframe data-manipulation bloomberg

我正在尝试创建所有代码的独特组合。我创建了一个包含所有组合的数据框。但是我想删除所有相同的东西。因此,如果第1行第1列中的自动收报机等于第1行第2列中的文本,那么我想要生成此NA或删除该行。因此,您将获得所有独特的组合。

q <- c("BATS LN EQUITY","DGE LN EQUITY","IMB LN EQUITY","RDSB LN EQUITY")
    p <- c("GBPUSD CURNCY","GOLDS INDEX","DXY CURNCY")
    o <- expand.grid(q=q, p=p)
    o[order(o$q),]
    o <- data.frame(o)
    o$q <- as.character(o$q)
    o$p <- as.character(o$p)
    o <- data.frame(o)



    for(i in 1:nrow(o)){
    if(o[i,1] = o[i,2]){
     o[i,2] = NA 
    }  
     }

2 个答案:

答案 0 :(得分:1)

将其视为保持两列不相等的行。尝试:o[o$q != o$p,]

您的解决方案也可以使用,但您需要在==中使用=代替if。像这样:

for(i in 1:nrow(o)){
  if(o[i,1] == o[i,2]){
    o[i,2] = NA 
  }  
}

这比我提到的第一种方式更慢,而不是惯用语。并且它们具有不同的输出,但两者都在您想要的选项集中。

答案 1 :(得分:0)

我更多的Python所以pythonic的方式是在pandas中使用重复的函数,但对于r我会认为unique()函数会更好:

unique(o)

也可以使用Duplicated()函数:

df[duplicated(o), ]