【发布时间】:2013-04-07 12:50:24
【问题描述】:
我有一个 data.table 并希望对行的每个子集应用一个函数。
通常情况如下:DT[, lapply(.SD, function), by = y]
但在我的情况下,该函数不返回原子向量,而只是返回一个向量。 有没有机会做这样的事情?
library(data.table)
set.seed(9)
DT <- data.table(x1=letters[sample(x=2L,size=6,replace=TRUE)],
x2=letters[sample(x=2L,size=6,replace=TRUE)],
y=rep(1:2,3), key="y")
DT
# x1 x2 y
#1: a a 1
#2: a b 1
#3: a a 1
#4: a a 2
#5: a b 2
#6: a a 2
DT[, lapply(.SD, table), by = y]
# Desired Result, something like this:
# x1_a x2_a x2_b
# 3 2 1
# 3 2 1
提前致谢,另外:我不介意函数的结果是否必须具有固定长度。
【问题讨论】:
-
您希望 x1 和 x2 具有相同的级别吗?
-
@RicardoSaporta 为简单起见,假设如此。
-
没有它会更简单。否则,需要修改级别。我是根据您如何创建 data.table 来询问的。 (即,从同一个集合中采样,但由于随机采样,并非所有值都被表示。非值应该为 0,还是应该直接忽略)?
标签: r data.table lapply