R:存储新列中一列的字符串出现次数

时间:2014-02-16 20:30:44

标签: r

假设我有一个数据框 df ,如下所示:

              timestamp           residence
2014/01/29 10:46:46 PM EST        Virginia, USA
2014/01/29 10:51:01 PM EST        Maryland, USA
2014/01/29 10:54:08 PM EST   Massachusetts, USA
2014/01/29 10:55:00 PM EST         Indiana, USA
2014/01/29 11:02:31 PM EST        Michigan, USA
2014/01/29 11:19:42 PM EST        Virginia, USA

现在我想采取这个并创建一个新的数据框 df.count ,其中包含一列,列出 df $ residence 下的每个字符串(一次)第二列列出了df $ residence中每个字符串的出现次数。这类似于

table(df$residence)

但输出格式看起来像:

         residence     count
     Virginia, USA     2
     Maryland, USA     1
Massachusetts, USA     1
      Indiana, USA     1
     Michigan, USA     1

3 个答案:

答案 0 :(得分:2)

我想您可以使用table来构建这个新的数据框:

tab <- table(df$residence)
data.frame(residence=names(tab), count=as.vector(tab))
#            residence count
# 1       Indiana, USA     1
# 2      Maryland, USA     1
# 3 Massachusetts, USA     1
# 4      Michigan, USA     1
# 5      Virginia, USA     2

答案 1 :(得分:1)

如果您只使用residence作为名称,那么

with(df, data.frame(count=tapply(residence, residence, length)))

如果您想要一个包含residence的实际列:

with(df, {
  summ <-tapply(residence, residence, length)
  data.frame(residence=names(summ), count=summ)
} )

答案 2 :(得分:1)

aggregate的另一种解决方案:

setNames(aggregate(seq(nrow(df)) ~ residence,df, length), c("residence","count"))

           residence count
1       Indiana, USA     1
2      Maryland, USA     1
3 Massachusetts, USA     1
4      Michigan, USA     1
5      Virginia, USA     2