2017-06-09 3 views
2

ein Beispiel Datenrahmen vor:Treshold Werte zeilenweise in einem Datenrahmen

A B C v 
5 4 2 3 
7 1 3 5 
1 2 1 1 

I alle Elemente einer Zeile auf 1 gesetzt werden soll, wenn das Element größer als oder gleich v ist, und 0 sonst. Der Beispieldatenrahmen würde folgendes ergeben:

A B C v 
1 1 0 3 
1 0 0 5 
1 1 1 1 

Wie kann ich das effizient machen? Die Anzahl der Spalten wird viel höher sein, und ich möchte eine Lösung, die nicht erfordert, dass ich die Namen der Spalten einzeln angeben muss, und sie stattdessen auf alle anwenden (außer v).

Meine Lösung mit einer for-Schleife ist viel zu langsam.

Antwort

5

Wir können eine logische Matrix erstellen und erzwingen auf binäre

df1[-4] <- +(df1[-4] >= df1$v) 
+5

slick.Can Sehr verallgemeinern 'df1 <[Namen (DF1) == 'v'!] - + (df1 [Namen (DF1) == 'v']> = df1 $ v) '... da die Anzahl der Spalten variieren kann, sowie die Position von' v'. – pyll

Verwandte Themen