看板 R_Language 關於我們 聯絡資訊
※ 引述《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部分 -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) http://tinyurl.com/j3ql84c data.table #1LhW7Tvj (R_Language) http://tinyurl.com/hr77hrn dplyr(上) #1LhpJCfB (R_Language) http://tinyurl.com/jtg4hau dplyr(下) #1Lhw8b-s (R_Language) tidyr #1Liqls1R (R_Language) http://tinyurl.com/jq3o2g3 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.76.63.212 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1466210341.A.5C3.html ※ 編輯: celestialgod (211.76.63.212), 06/18/2016 08:52:04
mowgur: 推推推推推 06/29 22:13