我正在慢慢学习如何使用应用程序和r中的哪些语句,但仍然在整体生活中失败。R:从循环中填充列表
我有一个数据帧,DF,4列(在现实中我的数据集数年由许多的日期,与几千user_ids):
>df
id timestamp user_id app_version
1 96 2013-03-05 12 1.05
2 99 2013-03-05 32 1.0.5
3 02 2013-03-05 21 1.05
4 14 2013-03-05 21 1.0.5
5 16 2013-03-05 12 1.0.5
6 32 2013-03-06 32 1.0.3
7 33 2013-03-06 33 1.0.3
8 37 2013-03-06 12 1.0.3
9 39 2013-03-06 21 1.0.3
10 40 2013-03-06 12 1.0.5
和矢量,应用程序:
应用< -c( “1.0.3”, “1.0.5”, “2.05”)
我的最终目标是计算每天在用户登录的次数的平均数目(即用户具有相同时间戳的条目的平均数)按版本号分开(例如,对于应用版本1.05,用户在2013年3月5日平均每天有3次登录)。我可以通过df[which(df$app_version="1.05"),]
手动执行此操作。但我想循环访问我的应用程序矢量,并在最后有一个数据框列表,每个应用程序版本有一个数据框,其中每个数据框都包含行和平均日期。登录次数作为列)。下面的代码是我的方法,但是我的最终列表不正确,因为它是两个数字的列表,而不是两个数据框。任何和所有的帮助将是天赐之物。谢谢!
require(reshape2)
require(dplyr)
require(lubridate)
df$timestamp <- as.Date(df$timestamp) # Converting to date
# Step 1 ------------------------------------------------------------------
# Parsing data into different dataframes for each app version
flist<-vector(mode="list",length=length(app))
fdts<-vector(mode="list",length=length(app))
for (i in 1:length(app)){
appdat<-df[which(df$app_version==app[i]),]
# Step 2 ------------------------------------------------------------------
# Creating table of timestamps as columns, with user_ids making up row
tmp.ndat<-dcast(appdat,id~timestamp,value.var="user_id",drop=TRUE)
# Step 3 ------------------------------------------------------------------
# Createing contingency tables of each day
ctable.day<-apply(tmp.ndat[,-1],2,table)
# Step 4 ------------------------------------------------------------------
# Calculating the avg and stdev for each user for each day
dts<-as.Date(names(ctable.day))
avg.day<-lapply(ctable.day,mean)
sd.day<-lapply(ctable.day,sd)
# Step 5 ------------------------------------------------------------------
# Combine all averages and stdevs, with timestamp as rows and app version as columns
tmp<-cbind(avg.day,sd.day)
tmp.dts<-as.Date(names(ctable.day))
flist[i]<-tmp
fdts[i]<-tmp.dts
}
return(flist)
目前还不清楚什么是你想办。你也谈论你的数据中不存在的2013-06-05日期。 – agstudy 2014-10-01 22:51:59