2016-03-02 83 views
1

我有一個數據框below.I想比較兩列與另一對兩列的對。每次列對的比較應基於將列1:2的條目與列2:1的條目進行比較。在這兩個列對匹配的地方,我希望將頻率計數添加到該列對中。如何比較兩列中的另一對列中的數據幀的一對

z <- c(3,3,2) 
y <- c(1,2,3) 
x <- data.frame(y,z) 
library(plyr) 
fr <- count(x[,1:2]) 
fr 
# The matched pair of 1:2 with 2:1 
fr[3,1:2] == fr[2,2:1] 

我的期望的輸出是包含匹配對頻率計數的總和數據幀。

y z freq 
1 1 3 1 
2 2 3 2 

回答

2

我們可以用base R來做到這一點。我們transform數據集通過改變'x'列的每個行的最小值'y'和'z'(使用pmin),'z'的最大值爲'y'和'z'使用pmax),創建一個'freq'的新列,值爲1。然後,使用xtabs將'頻率'的sum乘以'x'和'y'(默認情況下,xtabs得到sum),並將其轉換爲data.frameas.data.frame)。

as.data.frame(xtabs(freq~., transform(x, y= pmin(y,z), 
       z= pmax(y,z), freq=1))) 
# y z Freq 
#1 1 3 1 
#2 2 3 2 

或者另一種辦法是沿行中循環使用applyMARGIN=1sort元素和aggregate獲得通過分組的sum 'Y' 和 'Z'

x[] <- t(apply(x, 1, sort)) 
aggregate(Freq~., transform(x, Freq=1), sum) 
# y z Freq 
#1 1 3 1 
#2 2 3 2 
+0

有任何其他簡單的方法。我不是r專家,我對這個函數xtabs,pmax,pmin等沒有任何認識。它是不是具有相同的功能。 –

+0

@jaspsingh更新了另一個選項。希望它對你更容易。 – akrun

+0

謝謝。這很容易。你能否告訴我如何計算頻率計數而不使用計數..? –

相關問題