计算R中组中的因子

Jan*_*nke 7 r dataframe

这是我的数据:

> head(Kandula_for_n)
                date      dist  date_only
1 2005-05-08 12:00:00  138.5861 2005-05-08
2 2005-05-08 16:00:00 1166.9265 2005-05-08
3 2005-05-08 20:00:00 1270.7149 2005-05-08
6 2005-05-09 08:00:00  233.1971 2005-05-09
7 2005-05-09 12:00:00 1899.9530 2005-05-09
8 2005-05-09 16:00:00  726.8363 2005-05-09
Run Code Online (Sandbox Code Playgroud)

我现在想要一个额外的列,每天有数据条目(dist)的count(n).对于2005-05-08,这将是n = 3,因为在12,16和20时有3个数据条目.我已应用以下代码实际上给了我想要的我想要的代码:

ndist <-tapply(1:NROW(Kandula_for_n), Kandula_for_n$date_only, function(x) length(unique(x)))
Run Code Online (Sandbox Code Playgroud)

之后ndist<-as.data.frame(ndist),我得到了这个:

> head(ndist)
           ndist
2005-05-08     3
2005-05-09     4
2005-05-10     6
2005-05-11     4
2005-05-12     6
2005-05-13     6
Run Code Online (Sandbox Code Playgroud)

问题是计数与date_only一起被称为ndist.但是我需要在两个单独的列中使用它们,一个带有count,另一个带有date_only.如何才能做到这一点?我想它相当简单,但我只是不明白.如果你能给我任何想法,我将不胜感激.

谢谢你的努力.

JD *_*ong 8

仅仅因为我发现tapply()很难包裹我的大脑,我喜欢使用plyr这些类型的东西:

## make up some data
## you get better/faster/more answers if you do this bit for us :)
dates <- seq(Sys.Date(), Sys.Date() + 5, by = 1)
Kandula_for_n <- data.frame(date_only = sample( dates + 5, 10, replace=TRUE ) , dist=rnorm(10) )

require(plyr)
ddply(Kandula_for_n, "date_only", function(x) data.frame(x, ndist=nrow(x)) )
Run Code Online (Sandbox Code Playgroud)

这会给你一些类似的东西:

    date_only       dist ndist
1  2011-10-30  0.2434168     5
2  2011-10-30 -0.9361780     5
3  2011-10-30  1.4593197     5
4  2011-10-30 -0.1851402     5
5  2011-10-30  0.6652419     5
6  2011-10-31  0.8876420     1
7  2011-11-03  0.5087175     2
8  2011-11-03 -1.0065152     2
9  2011-11-04  0.4236352     2
10 2011-11-04  0.4535686     2
Run Code Online (Sandbox Code Playgroud)

ddply条线:

ddply(Kandula_for_n, "date_only", function(x) data.frame(x, ndist=nrow(x)) )

获取输入数据,按date.only字段对其进行分组,对于每个唯一值,它将匿名函数应用于仅由具有相同值的记录组成的数据帧date_only.我的匿名函数只需要获取data.frame x并附加一个名为ndistwhich 的列,该列是行数x.


Joh*_*lby 4

这些只是行名称。你可以走了:

ndist$date = row.names(ndist)
Run Code Online (Sandbox Code Playgroud)

编辑:或ndist = data.frame(date = names(ndist), ndist)取决于它是否已经是数据帧。