Re: [问题] 条件机率矩阵

楼主: celestialgod (天)   2016-06-18 08:38:58
※ 引述《mowgur (PINNNNN)》之铭言:
: [问题类型]:
: 程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
:
: [软件熟悉度]:
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: 我想把这样的资料
: 交易编号 会员卡号 V1 V2 V3 V4
: 6557 1235 0 0 1 1
: 6558 1235 1 0 1 0
: 6559 1235 1 1 1 0
: .
: .
: .
: .
: .
: 变成条件机率矩阵
: V1 V2 V3 V4
: V1 .2 .5 .7
: V2 .4 .6
: V3 .1
: V4
: [程式范例]:
: 资料group是8个dataframe组合的list 每个dataframe有14栏 前2栏是id 希望能够
: 输出8个条件机率矩阵组成的list
: 以下是我的程式码及错误讯息
: m <- 12
: f <- list(matrix(nrow = m, ncol = m))
: cp <- list(matrix(nrow = m, ncol = m))
: summation <- list(c())
: for(k in 1:length(group)){
: group[[k]] <- group[[k]][,-c(1,2)]
: summation <- apply(group[[k]],2,sum)
: for(i in 1:(m-1)) {
: for(j in (i+1):m){
: index <- (group[[k]][,i]==1 & group[[k]][,j]==1)
: f[[k]][i,j] <- length(group[[k]][index,1])
: cp[[k]][i,j] <- f[[k]][i,j]/summation[[k]][j]
: }
: }
: }
: Error in `*tmp*`[[k]] : subscript out of bounds
: [环境叙述]:
: Rx64 3.2.5
: [关键字]:
:
: 选择性,也许未来有用
:
library(dplyr)
# data generation
numMemer <- sample(300:500, 8, TRUE)
df_list <- lapply(1:8, function(i){
data.frame(member_id = rep(1:numMemer[i],
sample(1:15, numMemer[i], TRUE))) %>%
mutate(trans_id = 1:nrow(.), V1 = rbinom(nrow(.), 1, 0.5),
V2 = rbinom(nrow(.), 1, 0.5), V3 = rbinom(nrow(.), 1, 0.5),
V4 = rbinom(nrow(.), 1, 0.5))
})
# calculation of conditional probability matrix
prob_list <- lapply(df_list, select, starts_with("V")) %>%
lapply(as.matrix) %>%
lapply(function(x){
t(x) %*% x %>% sweep(1, diag(.), '/')
})
%>%, mutate, select请参考签名档的magrittr跟dplyr部分
作者: mowgur (PINNNNN)   2016-06-29 22:13:00
推推推推推

Links booklink

Contact Us: admin [ a t ] ucptt.com