我有一个包含两列和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)))
答案 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