运行 基于 R 中的字段计数
Running count based on field in R
我有一个这种格式的数据集
User
1
2
3
2
3
1
1
现在我想添加一个列 count 来计算用户的出现次数。我想要以下格式的输出。
User Count
1 1
2 1
3 1
2 2
3 2
1 2
1 3
我的解决方案很少,但所有这些解决方案都有些慢。
我的 data.frame 现在有 100,000 行,很快可能会增加到 100 万行。我需要一个也很快的解决方案。
这对于 ave
和 seq.int
来说相当容易:
> ave(User,User, FUN= seq.int)
[1] 1 1 1 2 2 2 3
这是一种常见的策略,通常在项目彼此相邻时使用。第二个参数是分组变量,在这种情况下,第一个参数实际上是一种虚拟参数,因为它唯一贡献的是长度,ave
不需要相邻行在分组内确定的值。
您可以使用我的 "splitstackshape" 包中的 getanID
:
library(splitstackshape)
getanID(mydf, "User")
## User .id
## 1: 1 1
## 2: 2 1
## 3: 3 1
## 4: 2 2
## 5: 3 2
## 6: 1 2
## 7: 1 3
这本质上是 "data.table" 的一种方法,看起来类似于以下内容:
as.data.table(mydf)[, count := seq(.N), by = "User"][]
一个选项使用 dplyr
library(dplyr)
df1 %>%
group_by(User) %>%
mutate(Count=row_number())
# User Count
#1 1 1
#2 2 1
#3 3 1
#4 2 2
#5 3 2
#6 1 2
#7 1 3
使用sqldf
library(sqldf)
sqldf('select a.*,
count(*) as Count
from df1 a, df1 b
where a.User = b.User and b.rowid <= a.rowid
group by a.rowid')
# User Count
#1 1 1
#2 2 1
#3 3 1
#4 2 2
#5 3 2
#6 1 2
#7 1 3
我有一个这种格式的数据集
User
1
2
3
2
3
1
1
现在我想添加一个列 count 来计算用户的出现次数。我想要以下格式的输出。
User Count
1 1
2 1
3 1
2 2
3 2
1 2
1 3
我的解决方案很少,但所有这些解决方案都有些慢。
我的 data.frame 现在有 100,000 行,很快可能会增加到 100 万行。我需要一个也很快的解决方案。
这对于 ave
和 seq.int
来说相当容易:
> ave(User,User, FUN= seq.int)
[1] 1 1 1 2 2 2 3
这是一种常见的策略,通常在项目彼此相邻时使用。第二个参数是分组变量,在这种情况下,第一个参数实际上是一种虚拟参数,因为它唯一贡献的是长度,ave
不需要相邻行在分组内确定的值。
您可以使用我的 "splitstackshape" 包中的 getanID
:
library(splitstackshape)
getanID(mydf, "User")
## User .id
## 1: 1 1
## 2: 2 1
## 3: 3 1
## 4: 2 2
## 5: 3 2
## 6: 1 2
## 7: 1 3
这本质上是 "data.table" 的一种方法,看起来类似于以下内容:
as.data.table(mydf)[, count := seq(.N), by = "User"][]
一个选项使用 dplyr
library(dplyr)
df1 %>%
group_by(User) %>%
mutate(Count=row_number())
# User Count
#1 1 1
#2 2 1
#3 3 1
#4 2 2
#5 3 2
#6 1 2
#7 1 3
使用sqldf
library(sqldf)
sqldf('select a.*,
count(*) as Count
from df1 a, df1 b
where a.User = b.User and b.rowid <= a.rowid
group by a.rowid')
# User Count
#1 1 1
#2 2 1
#3 3 1
#4 2 2
#5 3 2
#6 1 2
#7 1 3