A B C
0 1 0
1 1 0 <- here A and B is 1
1 0 0
0 1 1
1 1 1 <- here too
1 1 0 <- and here too
我想算的時間,其中A和B均爲1。在這種情況下,數量爲3個。這是很容易與SQL,但我不知道如何與R一起做。
A B C
0 1 0
1 1 0 <- here A and B is 1
1 0 0
0 1 1
1 1 1 <- here too
1 1 0 <- and here too
我想算的時間,其中A和B均爲1。在這種情況下,數量爲3個。這是很容易與SQL,但我不知道如何與R一起做。
如果df
與列的data.frame,A,B,C
:
sum(df$A==1 & df$B==1)
這確實的伎倆,先創建一些數據:
df = data.frame(round(matrix(runif(3*10), 10, 3)))
names(df) = c("A","B","C")
,並尋求解決方案:
sum(rowSums(df[c("A","B")]) == 2)
或者:
sum(apply(df[c("A","B")] == 1, 1, all))
編輯(泰勒林克):
我很好奇考慮速度的三種方法,我想通保羅的第一種方法是最快的,但錯了。使用微基準測試包(500次迭代)在一個10,000行的數據集:
## Unit: microseconds
## expr min lq median uq max neval
## LOGICAL() 386.725 397.455 412.1495 434.308 710.940 500
## APPLY() 31225.830 39327.696 42790.0280 46586.137 1169824.066 500
## ROWSUMS() 460.432 489.588 590.5840 621.373 7884.713 500
隨時刪除我的編輯,但我很好奇,並認爲信息是有價值的,但沒有我自己的答案 – 2013-05-13 18:55:41
@TylerRinker感謝您的編輯!我並不感到驚訝'apply'使用R循環的速度相當慢,而'rowSums'使用(可能)C代碼。 – 2013-05-13 19:14:14
如果你的列只包含0或1,你也可以說'總和(DF $ A&DF $ B)',它把' df $ A'和'df $ B'作爲布爾向量與'&'進行AND操作。 – 2013-05-13 18:26:05