Sqldf 的数据计数
Count of data by Sqldf
我的数据如下:
ID category
101 A
101 B
101 C
102 A
103 B
103 C
我想要这样的结果:
ID category Count
101 A 3
101 B 3
101 C 3
102 A 1
103 B 2
103 C 2
我试过类似的东西:
data<-sqldf("select *,count(ID) as count from data group by ID")
它显示输出为:
ID category count
101 C 3
102 A 1
103 C 2
一个选项使用data.table
library(data.table)
setDT(df1)[, Count:=.N, ID]
# ID category Count
#1: 101 A 3
#2: 101 B 3
#3: 101 C 3
#4: 102 A 1
#5: 103 B 2
#6: 103 C 2
或使用dplyr
library(dplyr)
df1 %>%
group_by(ID) %>%
mutate(Count=n())
或使用base R
df1$Count <- with(df1, ave(seq_along(ID), ID, FUN=length))
基础R
方法:
transform(df, count=table(ID)[as.character(ID)])
# ID category count
# 1 101 a 3
# 2 101 b 3
# 3 101 c 3
# 4 102 a 1
# 5 103 b 2
# 6 103 c 2
对于所有 SQL 解决方案,将您的代码输出(省略 category
除外)与原始数据框连接起来,如下所示:
library(sqldf)
sqldf("select * from data
left join (select ID, count(ID) as count from data group by ID)
using (ID)")
给予:
ID category count
1 101 A 3
2 101 B 3
3 101 C 3
4 102 A 1
5 103 B 2
6 103 C 2
注意:这是可重现形式的输入数据:
Lines <- "ID category
101 A
101 B
101 C
102 A
103 B
103 C"
data <- read.table(text = Lines, header = TRUE)
另外两个使用基础包的选项:
1.
merge(df, table(df$ID), by.x = "ID", by.y = "Var1")
输出:
ID category Freq
1 101 A 3
2 101 B 3
3 101 C 3
4 102 A 1
5 103 B 2
6 103 C 2
2.Very类似于akrun
提出的那个
df$count <- ave(df$ID, df$ID, FUN=length)
df
输出:
ID category count
1 101 A 3
2 101 B 3
3 101 C 3
4 102 A 1
5 103 B 2
6 103 C 2
我的数据如下:
ID category
101 A
101 B
101 C
102 A
103 B
103 C
我想要这样的结果:
ID category Count
101 A 3
101 B 3
101 C 3
102 A 1
103 B 2
103 C 2
我试过类似的东西:
data<-sqldf("select *,count(ID) as count from data group by ID")
它显示输出为:
ID category count
101 C 3
102 A 1
103 C 2
一个选项使用data.table
library(data.table)
setDT(df1)[, Count:=.N, ID]
# ID category Count
#1: 101 A 3
#2: 101 B 3
#3: 101 C 3
#4: 102 A 1
#5: 103 B 2
#6: 103 C 2
或使用dplyr
library(dplyr)
df1 %>%
group_by(ID) %>%
mutate(Count=n())
或使用base R
df1$Count <- with(df1, ave(seq_along(ID), ID, FUN=length))
基础R
方法:
transform(df, count=table(ID)[as.character(ID)])
# ID category count
# 1 101 a 3
# 2 101 b 3
# 3 101 c 3
# 4 102 a 1
# 5 103 b 2
# 6 103 c 2
对于所有 SQL 解决方案,将您的代码输出(省略 category
除外)与原始数据框连接起来,如下所示:
library(sqldf)
sqldf("select * from data
left join (select ID, count(ID) as count from data group by ID)
using (ID)")
给予:
ID category count
1 101 A 3
2 101 B 3
3 101 C 3
4 102 A 1
5 103 B 2
6 103 C 2
注意:这是可重现形式的输入数据:
Lines <- "ID category
101 A
101 B
101 C
102 A
103 B
103 C"
data <- read.table(text = Lines, header = TRUE)
另外两个使用基础包的选项:
1.
merge(df, table(df$ID), by.x = "ID", by.y = "Var1")
输出:
ID category Freq
1 101 A 3
2 101 B 3
3 101 C 3
4 102 A 1
5 103 B 2
6 103 C 2
2.Very类似于akrun
提出的那个df$count <- ave(df$ID, df$ID, FUN=length)
df
输出:
ID category count
1 101 A 3
2 101 B 3
3 101 C 3
4 102 A 1
5 103 B 2
6 103 C 2