假设我有一个数据框 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
答案 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