我有一个大约500,000行和四列的数据帧.数据框包含有关特定用户访问某个位置的数据.数据帧的示例如下:
> head(data)
FirstVisit VisitDate ID visit.count
1 40545 40545 000001 1
2 40545 40545 000002 1
3 40548 40548 000003 1
4 40545 40565 000001 2
5 40545 40575 000002 2
6 40545 40576 000002 3
Run Code Online (Sandbox Code Playgroud)
每个观察包含用户的第一个日期(整数格式,其中1是01/01/1900),他们的访问日期,他们的唯一ID(大约175,000个唯一ID)和访问次数(是他们的第一次访问,第二次访问等等?).访问次数上限为5,因此visit.count列中的最大值小于或等于5.我想创建一个矩阵(或数据帧,如果需要),它存储每个ID的最新访问次数; 就像是:
> head(data.matrix)
ID visit.count1 visit.count2 visit.count3 visit.count4 visit.count5
1 000001 0 1 0 0 0
2 000002 0 0 1 0 0
3 000003 1 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
ids <- unique(data$ID)
count.matrix <- matrix(data = 0, nrow = length(ids), ncol = 5)
for (i in 1:length(ids)){
ss <- subset(x = data, subset = data$ID==ids[i])
ifelse(
length(rownames(ss))==5,
count.matrix[i,5] <- 1,
ifelse(
length(rownames(ss))==4,
count.matrix[i,4] <- 1,
ifelse(
length(rownames(ss))==3,
count.matrix[i,3] <- 1,
ifelse(
length(rownames(ss))==2,
count.matrix[i,2] <- 1,
count.matrix[i,1] <- 1
)
)
)
)
}
Run Code Online (Sandbox Code Playgroud)
我该如何改进呢?
如果您不需要单独的列,
tapply(data$visit.ccount, data$ID, max)
Run Code Online (Sandbox Code Playgroud)
应该让你走很长的路.如果这样做,您可以使用它来基于"列化版本".
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |