我有两个数据:list包含271个值,listfull包含355个值(其中271个与列表中的相同).我想要的是在这两个文件中打印出84个不同的值.当我编写代码以打印"相同"值时,它们可以工作,但不适用于"不同情况".我试图找出原因,但不能.你可以帮我解决这个问题.谢谢
list<-read.table("C:\\Data\\list.txt", header=T)
listfull<-read.table("C:\\Data\\listfull.txt", header=T)
for (i in 1:271)
{
for (j in 1:355)
{
if(list$Cow_ID[i]==listfull$Cow_ID[j])
bo<-data.frame(listfull[j,])
}
write.table(bo,"C:\\Data\\store.txt",row.names = FALSE, dec = ".", na = "NA", sep = " ", append = TRUE, col.names = FALSE)
}
Run Code Online (Sandbox Code Playgroud)
//以上代码有效!
//但不是以下内容:
for (i in 1:355)
{
for (j in 1:271)
{
if(listfull$Cow_ID[i]!=listfull$Cow_ID[j])
bo<-data.frame(listfull[i,])
}
write.table(bo,"C:\\Data\\store.txt",row.names = FALSE, dec = ".", na = "NA", sep = " ", append = TRUE, col.names = FALSE)
}
Run Code Online (Sandbox Code Playgroud)
这里list和listfull的样子如下:
Lisfull List
Cow_ID Cow_ID
26 26
32 32
35 35
219 219
302 302
308 308
383
400
441
445
446
453
462
Run Code Online (Sandbox Code Playgroud)
你可以试试setdiff(listfull$Cow_ID, list$Cow_ID)
.
例如,有一些可重复的例子:
l1=c(26, 32, 35, 219, 302, 308, 383, 400, 441)
l2=c(26, 32, 35, 219, 302, 308)
setdiff(l1, l2)
> [1] 383 400 441
Run Code Online (Sandbox Code Playgroud)
你也可以使用%in%
或者match
我认为它不那么直截了当.
这是你想要的吗?