2016-12-06 60 views
0

我有一個數據框中有15000條目的2列。R一列中哪些項目高於另一列?

col1 col2 
mike anna 
eve charly 
george mike 
jenn george 

我想知道,Col1中的哪些條目比Col2中的條目要高。

我已經有一個解決方案,我環通在Col1中的每個條目,並檢查它在col2的位置,但15.000的需要年齡:

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

可能有人點我的方向,以改善呢?

THX 約爾格

+0

'which(df [,1] ==「george」)'? –

+2

你的問題不明確;我想你的意思是你想比較col1和col2中每個名字的等級。 – scoa

+0

預期結果是什麼?兩列共用的單個名稱的值/等級? –

回答

0

這裏是一個dplyr溶液來計算col1和COL2每個名稱的秩之間的距離。

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

然後,如果你只想要這500名行列後出現​​在COL2名稱:

%>% filter(diff < -500) 
1

其實,這是很簡單的 - 如果這是你在找什麼:

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

希望這有助於!

+0

你在這裏幹什麼? 'df $ col1'是一個'character'列,它並不真正允許向它添加'500'。 –

+0

我知道,但正如問題中所見user987875想要得到符合以下條件的行: if(myposinCol2 [1]>(i + 500)){#take it} –

相關問題