2016-05-02 19 views
0

Ich habe zwei Daten: Liste enthält 271 Werte und listfull enthält 355 Werte (271 von ihnen sind die gleichen wie in der Liste). Was ich will, ist die 84 verschiedenen Werte in diesen beiden Dateien auszudrucken. Wenn ich die Codes schreibe, um die "gleichen" Werte zu drucken, funktionieren sie, aber nicht für den "anderen Fall". Ich versuchte herauszufinden, warum, aber konnte nicht. Kannst du mir bitte dabei helfen? DankeNehmen Sie den Unterschied zwischen zwei Spalten

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) 
} 

// Diese obigen Codes funktionieren!

// Aber nicht das:

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) 
} 

Hier wie Liste und listfull wie folgt aussehen:

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 
+0

Können Sie uns bitte einige Beispieldaten geben, damit wir Ihnen besser helfen können? –

+0

@Yoda: Ich habe das Beispiel von Liste und Liste hinzugefügt. Sie sind einfach zwei Liste der Tier ID, und ich möchte diejenigen nehmen, die nur in Listfull, aber nicht in Liste ist! – hieu

Antwort

5

Sie können versuchen setdiff(listfull$Cow_ID, list$Cow_ID).

Eg mit einigen reproduzierbaren Beispiel:

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 

Sie könnten auch %in% oder match verwenden, aber es ist weniger straithforward, denke ich.

Ist das, was Sie wollten?

+0

Mit dem Kommentar von Richard. Es funktioniert auch für diese Lösung. Ich bin glücklich, diese Optionen für zukünftige Arbeiten zu behalten. Danke allen! – hieu

+0

Dank @Richard! –

1

wäre besser, wenn Sie uns einige Daten gegeben, mit zu arbeiten (wird diese Antwort aktualisieren wenn Sie das tun), aber der Unterschied zu bekommen, warum nicht versuchen:

listfull$Cow_ID[!listfull$Cow_ID %in% list$Cow_ID]

Zusätzlicher Vorteil ist, dass Sie keine For-Schleife mehr benötigen.

UPDATE

Ihre Daten gesehen. Der obige Code sollte gut funktionieren.

+0

Ich habe mir diese Lösung nie vorgestellt, da ich immer an eine "for-Schleife" gedacht habe. Viel mehr zu lernen! Vielen Dank! – hieu

+1

Gerne helfen! Plus für Ihre erste Zeile (dh um diese ** in ** die vollständige Liste zu bekommen), entfernen Sie einfach das Ausrufezeichen, nämlich: 'listfull $ Cow_ID [listfull $ Cow_ID% in% list $ Cow_ID]' Schauen Sie auch in 'setdiff 'wie von @Vincent auch beantwortet ... –

Verwandte Themen