n*****1 发帖数: 172 | 1 假设我有一个data(比较大, 大约1000个id), 每个id有若干个observation, 请问如何
完成下面的operation?
Data:
id X1 X2 e
1 1 2 2
1 3 4 2
1 5 6 3
2 7 8 3
2 9 10 4
第一步, 在每一row里, 用对应的e乘以所在row的X1和X2
id X1 X2
1 2 4
1 6 8
1 15 18
2 21 24
2 36 40
第二步, by id将row 相加 (这个应该可以用merge来完成)
id X1 X2
1 23 30
2 57 64
第三步, 每一row的X1和X2组成一个row vector[X1 X2], 然后运算[X1 X2]'*[X1 X2],
得到一个2X2的matrix (这里有两
个id,所以有两个这样的matrix)
第四步, 将第三步算出来的两个matrix相加
谢谢了!!! | y****2 发帖数: 34 | 2 data <- matrix(c(1 ,1 ,2, 2, 1, 3, 4, 2,1, 5, 6, 3,2, 7, 8, 3,2, 9, 10, 4),
ncol=4, byrow=T)
colnames(data) <- c("id", "x1", "x2", "e")
### step1:
data[,2:3] <- data[,2:3]*data[,4]
data1 <- data[,1:3]
### step2:
data2 <- aggregate(data1[,2:3], list(id=data1[,1]), sum)
### step3:
data3 <- split(data2[,2:3], f=list(data2[,1]))
data3 <- lapply(data3, as.vector, "numeric")
mprod <- function(x){x %*% t(x)}
data4 <- lapply(data3, mprod)
### step4:
data5 <- 0
for(i in 1:length(data4)){
data5 <- data5 + | n*****1 发帖数: 172 | 3 太感谢了!!!
,
【在 y****2 的大作中提到】 : data <- matrix(c(1 ,1 ,2, 2, 1, 3, 4, 2,1, 5, 6, 3,2, 7, 8, 3,2, 9, 10, 4), : ncol=4, byrow=T) : colnames(data) <- c("id", "x1", "x2", "e") : ### step1: : data[,2:3] <- data[,2:3]*data[,4] : data1 <- data[,1:3] : ### step2: : data2 <- aggregate(data1[,2:3], list(id=data1[,1]), sum) : ### step3: : data3 <- split(data2[,2:3], f=list(data2[,1]))
|
|