2016-04-25 4 views
0

I wie unten eine Datei haben:Testen Sie, ob die Spalten in einer Zeile sind gleich ina Datenrahmen

Item Loc1 Loc2 Loc3 
1 JP JP JP 
2 BP BP XP 
3 LP LP LP 

Ich möchte für den Zustand überprüfen, um zu sehen, ob Loc1 == == Loc2 Loc3 (Eigentlich habe ich viel mehr Spalten)

daher der Ausgang ich erwarte ist:

Item Loc1 Loc2 Loc3 Out 
1 JP JP JP TRUE 
2 BP BP XP FALSE 
3 LP LP LP TRUE 
+1

Es wäre hilfreich, wenn Sie ein reproduzierbares Beispiel liefern würden. Versuchen Sie mit 'data (mtcars)' –

+0

Was ist der @ $ @ # $ @ # Deal mit dem Bearbeiten und Löschen meiner Antwort @Ashwin? – hrbrmstr

+0

@hrbrmstr Ich war auch sehr verwirrt, warum Ihre Antwort nur die reproduzierbaren Daten und keine tatsächliche Antwort hatte. – brittenb

Antwort

1

die reproduzierbare Beispiel für die Verwendung in reponse des @ hrbrmstr, wäre ein Ansatz die folgenden sein:

product <- c("A", "B", "C", "D") 
Loc1 <- c("NY","DN","CO","MI") 
Loc2 <- c("NY","DN","CO","MI") 
Loc3 <- c("NY","DN","PH","MI") 
Loc4 <- c("NY","LA","CO","MI") 
Loc5 <- c("NY","DN","CO","MI") 

df <- data.frame(product, Loc1, Loc2, 
       Loc3, Loc4, Loc5, 
       stringsAsFactors=F) 

df$out <- apply(df[, -1], 1, function(x) length(unique(x)) == 1) 
df 
# product Loc1 Loc2 Loc3 Loc4 Loc5 out 
# 1  A NY NY NY NY NY TRUE 
# 2  B DN DN DN LA DN FALSE 
# 3  C CO CO PH CO CO FALSE 
# 4  D MI MI MI MI MI TRUE 

Dieser Ansatz Schleifen durch df Zeile für Zeile und Schecks für die Anzahl der eindeutigen Werte in den Standortspalten. Wenn sie alle identisch sind, wird die Länge 1 sein, so dass die Prüfung TRUE zurückgibt, wenn sie alle identisch sind und FALSE andernfalls.

+0

markiert. Danke, dass dein Code gut zu funktionieren scheint. – Ashwin

2

Eine Option ist

!rowSums(!df1[-1]==df1[2][row(df1[-1])]) 
#[1] TRUE FALSE TRUE 
3

Um für alle Spalten Konto:

read.table(text="Item Loc1 Loc2 Loc3 
1 JP JP JP 
2 BP BP XP 
3 LP LP LP", header=TRUE, stringsAsFactors=FALSE) -> df 

df$Out <- apply(df, 1, function(x) { length(unique(x[-1]))==1 }) 

print(df) 

## Item Loc1 Loc2 Loc3 Out 
## 1 1 JP JP JP TRUE 
## 2 2 BP BP XP FALSE 
## 3 3 LP LP LP TRUE 
+0

Ich melde mich bei diesem Fehlverhalten, es sei denn, du bringst es zurück. – hrbrmstr

+0

Ich habe es selbst zurückgerollt und zu den Mods @Ashwin – hrbrmstr

Verwandte Themen