作者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://webptt.com/cn.aspx?n=bbs/R_Language/M.1489732720.A.401.html
1F:→ locka: 试试看sapply(m[,3], function()grepl(G[i],m[,3]))? 03/17 19:20
2F:→ Steven87: 楼上无法耶,另外自定义funcion不用加{}吗? 03/17 21:32
3F:→ locka: sorry 少打x… function(x)。 一行可用{}可不用 03/17 21:56
4F:→ Wush978: 我没很仔细看,所以可能答错。如果是genres这栏,我以前 03/19 10:07
5F:→ Wush978: 认为是R不容易转换成一般dummy variable的资料格式,所以 03/19 10:07
6F:→ Wush978: 写了一个套件: FeatureHashing来转。缺点是转出来的矩阵 03/19 10:08
7F:→ Wush978: 是稀疏矩阵(不确定你会不会用),column index是hash後 03/19 10:08
8F:→ Wush978: 的 03/19 10:08
9F:→ Wush978: 如果你是後续要做ML,可以用。一般分析的话,就不太好用 03/19 10:08
10F:→ Steven87: 感谢各位回答,後来发现grepl比对不需要使用sapply 03/22 15:11