简而言之,我正在努力加快速度。这是我的慢代码:
library(dplyr)
tmp <- unique(kat$pnr) # Sort out the unique entries (ends up to about 572000)
sex = c()
for(i in tmp){ # For each unique pnr, look up the sex and append it to the new dataset
temptable <- filter(kat, pnr == i)
sex[i] <- temptable$sex
}
当前,该循环将花费我几个小时,因为我在tmp数据集中有572000行要循环通过,当我进行一些较短的测试运行时,似乎系统每秒处理约50行。那么,有没有一种方法可以用运行速度更快的东西来代替这个循环?
在kat数据集中,我大约有40列和905000行,其中pnr是唯一标识符,但是,一个pnr可以在kat中出现一到两次。我想进行性别统计,因此我基本上想整理出唯一的pnrs和每个pnr的性别。
答案 0 :(得分:2)
带有==
的唯一元素中的filter
会更慢,并且也会循环播放。相反,对于这种情况,如果我们想在“性别”列上为“ pnr”的每个唯一元素找到一些描述性统计信息,则groupby
操作可能更合适。
library(dplyr)
kat %>%
group_by(pnr) %>%
summarise(val = fn(sex))
使用data.table
library(data.table)
setDT(kat)[, .(val = fn(sex)), by = .(pnr)]
注意:不清楚要在“性别”列上应用的功能
如果打算创建list
中的sex
,则
lst1 <- split(kat$sex, kat$pnr)