如何從數據框中有效地提取組合常數列?我已經在下面包含了一個plyr實現來明確我想要做什麼,但是它很慢。我怎樣才能儘可能有效地做到這一點? (理想情況下,根本不分割數據幀)。在data.frame中有效定位組合常數列
base <- data.frame(group = 1:1000, a = sample(1000), b = sample(1000))
df <- data.frame(
base[rep(seq_len(nrow(base)), length = 1e6), ],
c = runif(1e6),
d = runif(1e6)
)
is.constant <- function(x) length(unique(x)) == 1
constant_cols <- function(x) head(Filter(is.constant, x), 1)
system.time(constant <- ddply(df, "group", constant_cols))
# user system elapsed
# 20.531 1.670 22.378
stopifnot(identical(names(constant), c("group", "a", "b")))
stopifnot(nrow(constant) == 1000)
在我的實際使用情況下(在內心深處GGPLOT2)有可能是恆定的,非恆列的任意數量。示例中數據的大小約爲正確的數量級。
你已經這樣做比使用plyr任何純-R實現更好的。恕我直言,你只能通過按組排序df(相當快)然後掃描C代碼中斷來做更好的事情。 – 2011-12-27 19:31:00
@Simon我比任何基於plyr的行解決方案都做得更好 - 我覺得應該有一個基於列的解決方案。 – hadley 2011-12-28 15:04:25