Sqldf的数据计数

时间:2015-06-15 07:30:51

标签: r 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

4 个答案:

答案 0 :(得分: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 :(得分:1)

基础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

答案 2 :(得分:0)

使用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))

答案 3 :(得分:0)

使用基础包的另外两个选项:

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.非常类似于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