[問題] 使用sapply填入Dummy

看板R_Language作者 (Bogi)時間7年前 (2017/03/17 14:38), 編輯推噓0(0010)
留言10則, 3人參與, 最新討論串1/1
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 我的Data是電影的評比資料,有兩千萬筆, 其中電影的類別(genres)是屬於多重標籤, 為了分析各種類別的電影評分狀況, 我打算將所有電影建立Dummy Variable, 每一筆評比資料會根據他電影的標籤,在每個類別底下有 T/F boolean值。 資料像是這樣 movieId title genres Adventure Romance "1" "Toy Story (1995)" "Adventure|Animation|Children|... "Truth" "False" .................... Rating .................... 4.5 目前我已經成功將所有類別全切出來,用的code如下 Genres <- unique(unlist(as.character(movies[,3]) %>% strsplit(split='[|]'))) 接著我創造出空的Dummy for(i in c(1:20)){ y=i+3 merge <- insertCol(as.matrix(merge),y,v=NA,cName=Genres[i]) } 接著我試著用lapply或sapply,想將boolean值根據merge[,3]比對填入, 使用的code如下: for(i in c(1:20)){ y=i+3 merge[,y] <- sapply(merge[,3],grepl(Genres[i],merge[,3])) } 但問題來了,他一直跟我說grepl並不是function, 嘗試過各種apply家族或是自定義的函數一樣有問題, 不曉得是哪裡出了問題? 另外我知道這方法本身很土法,好像有更好的產生Dummy的方式, 不過我還看不懂XD,所以想說先用這種直觀的方式練習一些packages, 再麻煩各位幫我解惑一下感謝。 [環境敘述]: R version 3.3.3 (2017-03-06) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 x64 (build 9200) [關鍵字]: lapply sapply dummy -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.236.39 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1489732720.A.401.html

03/17 19:20, , 1F
試試看sapply(m[,3], function()grepl(G[i],m[,3]))?
03/17 19:20, 1F

03/17 21:32, , 2F
樓上無法耶,另外自定義funcion不用加{}嗎?
03/17 21:32, 2F

03/17 21:56, , 3F
sorry 少打x… function(x)。 一行可用{}可不用
03/17 21:56, 3F

03/19 10:07, , 4F
我沒很仔細看,所以可能答錯。如果是genres這欄,我以前
03/19 10:07, 4F

03/19 10:07, , 5F
認為是R不容易轉換成一般dummy variable的資料格式,所以
03/19 10:07, 5F

03/19 10:08, , 6F
寫了一個套件: FeatureHashing來轉。缺點是轉出來的矩陣
03/19 10:08, 6F

03/19 10:08, , 7F
是稀疏矩陣(不確定你會不會用),column index是hash後
03/19 10:08, 7F

03/19 10:08, , 8F
03/19 10:08, 8F

03/19 10:08, , 9F
如果你是後續要做ML,可以用。一般分析的話,就不太好用
03/19 10:08, 9F

03/22 15:11, , 10F
感謝各位回答,後來發現grepl比對不需要使用sapply
03/22 15:11, 10F
文章代碼(AID): #1OouHmG1 (R_Language)