更好地对数据帧中的值进行子集化和计数

时间:2017-03-30 02:19:56

标签: r statistics

我有一个包含两列和70,000行的数据框。在下面的示例中,一列提供了一个家庭的标识符,列b。另一栏是指家庭中的个体,在1到n的编号中有一些错误(可能是1,2,3或1,4,5),在下面的例子中列a

我正在尝试使用层次聚类,将家庭中的个人数量作为特征。我在下面写的代码计算一个家庭中的个人数量,并将它们放在正确的列和行中,但是我需要几分钟的实际数据集,我假设它的大小。有没有更好的方法来获取这些信息?

fake.data <- data.frame(a = c(1,1,5,6,7,1,2,3,1,2,4), b = c("a", "a", "a", "a", "a", "b", "b", "b", "c", "c", "c"))
fake.cluster <- data.frame(b = unique(fake.data$b))
fake.cluster$members <- sapply(fake.cluster$b, function(x)     length(unique(subset(fake.data, fake.data$b == x)$a)))

2 个答案:

答案 0 :(得分:1)

不知道这是否更快,但您可以通过各种方式使用dplyr。一种方法:获取不同的行,然后计算b

library(dplyr)
fake.cluster <- fake.data %>%
  distinct() %>%
  count(b)

答案 1 :(得分:1)

以下是使用data.table

的选项
library(data.table)
setDT(fake.data)[, .(members = uniqueN(a)), b]
#   b members
#1: a       4
#2: b       3
#3: c       3