R - 替换数据框中的重复元素

时间:2016-10-05 08:20:02

标签: r database replace

我有一个名为tweets的数据集,如下所示:

     V1        V2         V3  

1    pos       text1      text4

2    neg       text2      text1

3    neu       text3      text5

在V2中有3424个obs,而在V3 1000中是obs。这些obs是从.txt文件导入的推文。 我想要的是这样的:

     V1        V2         V3  

1    pos          NA      text4

2    neg       text2      text1

3    neu       text3      text5

因此,如果V2中的元素与V3中的元素相同,则V2中的元素必须替换为NA。

我尝试使用此代码:

x <- "N/A" 
for(i in 1:1000){ 
  for(l in 1:3424){
    if(full_corpus[i,3] == (full_corpus[l,2])){
    replace(full_corpus,l,x)
}}}

我不知道这是否是最好的方法,而且我不太清楚如何更换&#34;的工作原理。

我收到此错误消息:

  Error in Ops.factor(full_corpus[i, 3], (full_corpus[l, 2])) : 
    level sets of factors are different

我该怎么做? 对不起,但我开始使用R和编码,今年在大学,我在这个领域仍然有很多困难。

我也尝试了这个:

library(dplyr)
df %>% mutate(textA = ifelse(textA %in% textB, NA, textA) )

但它不起作用。我得到了

This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information

和R崩溃了。我尝试重新安装包dplyr包,但我有相同的结果。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

由于您在帖子中提供的第一个错误。 我假设在阅读您的数据时,R将V2V3转换为factors。 这是你得到错误的方式。由于此NA中的Level不是factors

但感谢被factors Live变得容易一些: 您可以比较levelsV2的{​​{1}}并删除V3levels,它们都出现在两个向量中,因此您无需循环整个数据。

因此NA为您提供duplicates <- match(levels(V2),levels(V3))中重复levels的位置

然后你可以通过以下方式删除它们:

V2

答案 1 :(得分:1)

试试这个:

df[which(df$V2 %in% df$V3),]$V2 <- NA