我试图比较数据帧行的值,并删除所有匹配的值,用此
dat[!dat[1]==dat[2]]
Run Code Online (Sandbox Code Playgroud)
哪里
> dat
Run Code Online (Sandbox Code Playgroud)
回报
n1 n2
n1 n4
n4 n5
n1 n3
n4 n4
Run Code Online (Sandbox Code Playgroud)
所以我希望它比较值并删除最后一行,因为两列都有相同的数据.但是当我使用上面的代码时,它会告诉我
Error in Ops.factor(left, right) : level sets of factors are different
Run Code Online (Sandbox Code Playgroud)
在str(dat)读
'data.frame': 5 obs. of 2 variables:
$ V1: Factor w/ 2 levels "n1","n4": 1 1 2 1 2
$ V2: Factor w/ 4 levels "n2","n3","n4",..: 1 3 4 2 3
Run Code Online (Sandbox Code Playgroud)
And*_*rie 14
我怀疑在创建数据时,您无意中隐式地将列转换为因子.这可能发生在您从源读取数据时,例如使用read.csv或时read.table.这个例子说明了它:
dat <- read.table(text="
n1 n2
n1 n4
n4 n5
n1 n3
n4 n4")
str(dat)
'data.frame': 5 obs. of 2 variables:
$ V1: Factor w/ 2 levels "n1","n4": 1 1 2 1 2
$ V2: Factor w/ 4 levels "n2","n3","n4",..: 1 3 4 2 3
Run Code Online (Sandbox Code Playgroud)
解决方法是将参数传递stringsAsFactors=FALSE给read.table():
dat <- read.table(text="
n1 n2
n1 n4
n4 n5
n1 n3
n4 n4", stringsAsFactors=FALSE)
str(dat)
'data.frame': 5 obs. of 2 variables:
$ V1: chr "n1" "n1" "n4" "n1" ...
$ V2: chr "n2" "n4" "n5" "n3" ...
Run Code Online (Sandbox Code Playgroud)
然后你的代码工作(除了我怀疑你错过了一个逗号):
dat[!dat[1]==dat[2], ]
V1 V2
1 n1 n2
2 n1 n4
3 n4 n5
4 n1 n3
Run Code Online (Sandbox Code Playgroud)