s****h 发帖数: 3979 | 1 R新手,有几个问题,一起请教一下:
我想建一个data frame,有7个columns.
因为数据量相对R来说比较大(0.5M users, each with 50 items),用个loop,一次做
500个users
allres <- list()
for i{
create df
allres[i] <- df
}
For each user,take first 50 items. (自己瞎弄的一个推荐系统,和classic user
based, item based有些不一样)
df has 50 X 1000 rows, and 7 variable (v1 - v7)
我打算每个variable弄一个vector,然后combine成df
可是有些variable我只会弄成list。例如,我是这么create 50 X 1000个double
variable for v2的:
v2 <- lapply(1:tmpTestIn@data@data@Dim[2], FUN=function(i) { c(ratings2@data
[i, preNew@items[[i]]], rep(0, topn - length(preNew@items[[i]]))) } )
问题1:
typeof(c(ratings2@data[i, preNew@items[[i]]], rep(0, topn - length(preNew@
items[[i]]))))
double
typeof(v2[[i]])
double
How to create double vector v2,or how to convert list v2 to a vector?
问题2: 把 allres list concat成一个data frame,用rbindlist应该可以吧?
dfall <- rbindlist(allres)
问题3: 假如dfall已经建好了。
dfall有7个variable,其中包括userid, itemid, rank (from 1 to 50) of the
itemid for the userid。假设还有v4,v5,v6。
create a new data frame from dfall,with 2 new variables
需要
1. new variable 1 (v8) : 用一个function F, newVariable <- F(v4, v5, v6),
2. new variable 2 (v9) : 用newVariable 1对每个user的items重新排序,item的
rank 就是 new variable 2
3. 基于v1-v9的filter
多谢了 |
Y****a 发帖数: 243 | 2 my guess is:
tmpTestIn@data@data@Dim[2] = 50
topn = 1000
Q1: length(v2) = 50, length(v2[[1]]) = 1000
v2 <- unlist(v2)
Q2: assume now your create df returns a data.frame of dim 50,000 x 7
dfall <- do.call('rbind',lapply(range of i, function(i) create df)
Q3:
dfall$v8 <- F(v4, v5, v6)
dfall$v9 <- 0
for (u in userIDs) {
for (i in itemIDs) {
idx <- which((dfall$userID == u) & (dfall$itemID == i))
dfall$v9[idx] <- order(dfall$v8[idx])
}
} |
Y****a 发帖数: 243 | 3 btw, 有必要把数据结构搞得这么复杂么?自己给自己挖坑啊? |
s****h 发帖数: 3979 | 4 多谢回复
我没怎么用过R,要用它的一个package,所以就胡乱对付着用。
用lapply,v2就成list了。 |
v*******e 发帖数: 11604 | 5 千万不要用R来处理数据变换之类的东西。
分分钟后悔。
R只用于读入data frame,然后call regression functions。 |
Y****a 发帖数: 243 | 6 这位同学,就算你对R有成见,也不要这么误导人好不好?
你只会用"R只用于读入data frame,然后call regression functions", 不代表R就只
能干这个
R的数据变换很强大的,你不会用罢了。
【在 v*******e 的大作中提到】 : 千万不要用R来处理数据变换之类的东西。 : 分分钟后悔。 : R只用于读入data frame,然后call regression functions。
|
Y****a 发帖数: 243 | 7 我是说你的 @data@data@item 那部分
除了lapply,还有sapply可以用
【在 s****h 的大作中提到】 : 多谢回复 : 我没怎么用过R,要用它的一个package,所以就胡乱对付着用。 : 用lapply,v2就成list了。
|
Y****a 发帖数: 243 | 8 其实0.5M x 50不是很大,R应该可以处理,但是你的程序很可能不efficient,毕竟是
新手,所以会很慢 |
|
v*******e 发帖数: 11604 | 9
我第一次用R的时候,那两个assistant professor还在新西兰教书呢。这么多年用R下
来,这是我最有用的结论。
【在 Y****a 的大作中提到】 : 这位同学,就算你对R有成见,也不要这么误导人好不好? : 你只会用"R只用于读入data frame,然后call regression functions", 不代表R就只 : 能干这个 : R的数据变换很强大的,你不会用罢了。
|
g**y 发帖数: 210 | 10 Try plyr...
user
【在 s****h 的大作中提到】 : R新手,有几个问题,一起请教一下: : 我想建一个data frame,有7个columns. : 因为数据量相对R来说比较大(0.5M users, each with 50 items),用个loop,一次做 : 500个users : allres <- list() : for i{ : create df : allres[i] <- df : } : For each user,take first 50 items. (自己瞎弄的一个推荐系统,和classic user
|
d******e 发帖数: 7844 | 11 哪两个?
就只
【在 v*******e 的大作中提到】 : : 我第一次用R的时候,那两个assistant professor还在新西兰教书呢。这么多年用R下 : 来,这是我最有用的结论。
|
v*******e 发帖数: 11604 | 12
还能有哪两个? Ross Ihaka,Robert Gentleman
【在 d******e 的大作中提到】 : 哪两个? : : 就只
|
z*****h 发帖数: 111 | 13 No one knows about data.table and dplyr? |