答案 0 :(得分:1)
使用lapply(as.list(unique(DF$mv)), function(x){return(as.matrix(DF[(mv==x), list(consumption, dailySd, period)]))})
lapply
lapply
的第一个参数是mv值的唯一列表,第二个参数是过滤data.table的函数,保留相关列并将其转换为矩阵。 text
会自动循环遍历列表并返回列表
答案 1 :(得分:0)
使用data.table::split
编写此内容的另一种方式:
lapply(
split(DT, by="mv", keep.by=FALSE),
function(DT) DT[, as.matrix(.SD),
.SDcols=c("consumption", "dailySd", "isAbsentBool")]
)
数据:
library(data.table)
DT <- data.table(consumption=c(10,10,50,70),
dailySd=c(1,2,3,4),
isAbsentBool=c(0,0,0,0),
mv=c("A.V1", "A.V1", "A.v2", "A.V3"),
period=c(1,2,3,4))