如何计算 R 中每个 ID 的观察值?

数据挖掘 r
2021-09-28 17:33:50

我有大量数据,我必须计算每个 ID 的测量值。我已经做的是在所有文件上创建一个数据框,我省略了 NA。这部分工作正常。我想知道 nrow-function 是否是解决这个问题的正确函数,但我发现这不会导致我到达目标,因为它返回一个数字作为输出。

我正在寻找的是如果你有这样的条目:

1155 2010-05-02  2.7200    1
1156 2010-05-05  2.6000    3
1157 2010-05-08  2.6700    1
1158 2010-05-11  3.5700    2

我得到一个清单:

ID          Number of observations
1           2
2           1
3           1
4个回答

使用data.table结构(参见wiki),

library(data.table)
D <- data.table(x = c(1155, 1156, 1157, 1158),
                date = as.Date(c("2010-05-02", "2010-05-05", "2010-05-08", "2010-05-11")),
                y = c(2.7200, 2.6000, 2.6700, 3.5700),
                id = c(1, 3, 1, 2))
counts <- D[, .(rowCount = .N), by = id]
counts

这将返回

counts
##    id rowCount
## 1:  1        2
## 2:  3        1
## 3:  2        1

另一种方法是简单地使用“表格”功能。

ids<-c(1,3,1,2)
counts<-data.frame(table(ids))
counts

好的,如果我理解正确,您可以执行以下操作:

df$observations <- rep(1, nrow(df))
df <- df[ ,-file_name_column]
new_data <- data.frame(aggregate(df, by= ID, FUN=sum))

注意:这可能无法完全正常工作,因为我不确定您的数据框是什么样的。

正如前面的答案所暗示的那样,aggregate() 应该可以工作。另一种选择是使用plyr 包

count(yourDF,c('id'))

在带有“id”的向量中使用更多列将细分计数。

我相信 ddply()(也是 plyr 的一部分)有一个 summarise 参数,它也可以做到这一点,类似于 aggregate()。