我有一个名为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包,但我有相同的结果。
提前感谢您的帮助。
答案 0 :(得分:2)
由于您在帖子中提供的第一个错误。
我假设在阅读您的数据时,R将V2
和V3
转换为factors
。
这是你得到错误的方式。由于此NA
中的Level
不是factors
。
但感谢被factors
Live变得容易一些:
您可以比较levels
和V2
的{{1}}并删除V3
和levels
,它们都出现在两个向量中,因此您无需循环整个数据。
因此NA
为您提供duplicates <- match(levels(V2),levels(V3))
中重复levels
的位置
然后你可以通过以下方式删除它们:
V2
答案 1 :(得分:1)
试试这个:
df[which(df$V2 %in% df$V3),]$V2 <- NA