2016-12-06 9 views
0

Ich habe 2 Spalten in einem Datenrahmen mit 15.000 Einträgen.R Welche Elemente in einer Spalte sind höher als in einer anderen Spalte?

Ich möchte herausfinden, welche Einträge in Spalte1 eine bestimmte Menge höher als in Spalte2 sind.

Ich habe bereits eine Lösung, wo ich Schleife durch jeden Eintrag in Col1 und überprüfen Sie es Position ist in Col2, aber mit 15.000 in nimmt Alter:

for(i in 1:nrow(df)){ 
    myposinCol2 <- grep(df[i,1], df[,2]) 
    if(myposinCol2[1] > (i + 500)){ #take it } 
} 

mich jemand könnte in eine Richtung weisen, dies zu verbessern?

Thx Joerg

+0

'was (df [, 1] ==" george ")'? –

+2

Ihre Frage ist mehrdeutig; Ich denke, du meinst, du willst die Namen jedes Namens in col1 und col2 vergleichen. – scoa

+0

Was ist das erwartete Ergebnis? Werte/Rang für einzelne Namen, die beiden Spalten gemeinsam sind? –

Antwort

0

Hier ist eine Lösung dplyr den Abstand zwischen dem Rang jeden Namen in col1 Col2 und zu berechnen.

library(dplyr) 
library(tidyr) 
add_rownames(d) %>% 
    gather(key, name, -rowname) %>% 
    group_by(name) %>% 
    arrange(key) %>% 
    summarise(diff=as.numeric(first(rowname)) - as.numeric(last(rowname))) 

Dann, wenn Sie nur Namen wollen die 500 Reihen später in col2 erscheinen:

%>% filter(diff < -500) 
1

In der Tat ist es sehr einfach - wenn das ist, was Sie suchen:

df[which(df$col1 + 500 == df$col2),] 

Hoffe, das hilft!

+0

Was machst du hier genau? 'df $ col1' ist eine Spalte' character', die es nicht wirklich erlaubt, '500' hinzuzufügen. –

+0

Ich weiß, aber wie in der Frage gesehen Benutzer987875 möchte die Zeilen, die folgende Bedingung erfüllen: if (myposinCol2 [1]> (i + 500)) {#take it} –

Verwandte Themen