作者Steven87 (Bogi)
看板R_Language
標題[問題] 使用sapply填入Dummy
時間Fri Mar 17 14:38:38 2017
[問題類型]:
程式諮詢(我想用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
→ locka: 試試看sapply(m[,3], function()grepl(G[i],m[,3]))? 03/17 19:20
→ Steven87: 樓上無法耶,另外自定義funcion不用加{}嗎? 03/17 21:32
→ locka: sorry 少打x… function(x)。 一行可用{}可不用 03/17 21:56
→ Wush978: 我沒很仔細看,所以可能答錯。如果是genres這欄,我以前 03/19 10:07
→ Wush978: 認為是R不容易轉換成一般dummy variable的資料格式,所以 03/19 10:07
→ Wush978: 寫了一個套件: FeatureHashing來轉。缺點是轉出來的矩陣 03/19 10:08
→ Wush978: 是稀疏矩陣(不確定你會不會用),column index是hash後 03/19 10:08
→ Wush978: 的 03/19 10:08
→ Wush978: 如果你是後續要做ML,可以用。一般分析的話,就不太好用 03/19 10:08
→ Steven87: 感謝各位回答,後來發現grepl比對不需要使用sapply 03/22 15:11