我擁有一個包含兩列以上的數據幀。用R中的「by」刪除空組合
d <- data.frame(
a=c(1, 1, 2, 2),
b=c(T, T, T, F),
c=c(0, 0.25, 0.5, 0.75),
d=c("a", "b", "c", "d")
)
我想要做的組「d」是由列「A」,和「b」的行,然後在列「c」和「d」的操作。然而,當我使用by
時,我得到的空條目對應於未出現在「d」中的組合。
by(d, list(d$a, d$b), nrow)
# : 1
# : FALSE
# [1] NA
# ------------------------------------------------------------
# : 2
# : FALSE
# [1] 1
# ------------------------------------------------------------
# : 1
# : TRUE
# [1] 2
# ------------------------------------------------------------
# : 2
# : TRUE
# [1] 1
我想是沒有對應於= 1和B空單元格的結果= FALSE:
# : 2
# : FALSE
# [1] 1
# ------------------------------------------------------------
# : 1
# : TRUE
# [1] 2
# ------------------------------------------------------------
# : 2
# : TRUE
# [1] 1
在這個例子中,我只是用nrow
,但在現實中,我需要這兩個「c」和「d」的功能,所以我真的需要by
而不是tapply
(雖然如果有人知道如何做到這一點與tapply
,這也很受歡迎)。因爲我的數據非常大,所以我不想過濾事實後的by
對象。
如果你願意使用'你可以很容易地dplyr'做類似:'d%>%group_by(a,b)%>%mutate(newcol = paste0(c,d))''。如果你需要答案,那也是可行的。 – hrbrmstr 2014-10-22 01:06:09
你想要什麼結果?我真的不明白你的解釋 – 2014-10-22 01:09:15
這裏採取了一個盲目的過濾器(Filter(Negate(is.na),by(d,list(d $ a,d $ b),nrow))' – rawr 2014-10-22 01:13:49