R:使用data.table和self-join的组首次观察
发布时间:2020-12-12 16:45:40 所属栏目:MsSql教程 来源:网络整理
导读:我试图通过一组三个变量使用data.table来获取顶行. 我有一个工作的解决方案: col1 - c(1,1,2,3,3)col2 - c(2000,2000,2001,2001)col4 - c(1,4,5,6,7,8,9,10,11,12)data - data.frame(store=col1,year=col2,month=12,sales=col4)solution1 - data.table(data)
我试图通过一组三个变量使用data.table来获取顶行.
我有一个工作的解决方案: col1 <- c(1,1,2,3,3) col2 <- c(2000,2000,2001,2001) col4 <- c(1,4,5,6,7,8,9,10,11,12) data <- data.frame(store=col1,year=col2,month=12,sales=col4) solution1 <- data.table(data)[,.SD[1,],by="store,year,month"] 我使用Matthew Dowle建议的较慢的方法在以下链接中: https://stats.stackexchange.com/questions/7884/fast-ways-in-r-to-get-the-first-row-of-a-data-frame-grouped-by-an-identifier 我试图实现更快的自我加入,但不能让它上班. 有没有人有什么建议? 解决方法选项1(使用键)设置要存储的关键,年,月 DT <- data.table(data,key = c('store','year','month')) 然后,您可以使用unique创建一个包含键列的唯一值的data.table.默认情况下,这将占用第一个条目 unique(DT) store year month sales 1: 1 2000 12 1 2: 1 2001 12 3 3: 2 2000 12 5 4: 2 2001 12 7 5: 3 2000 12 9 6: 3 2001 12 11 但是,可以肯定的是,您可以使用mult =’first’的自联接. (其他选项是“全部”或“最后”) # the key(DT) subsets the key columns only,so you don't end up with two # sales columns DT[unique(DT[,key(DT),with = FALSE]),mult = 'first'] 选项2(无键) 没有设置密钥,使用起来会更快.我不是.SD DTb <- data.table(data) DTb[DTb[,list(row1 = .I[1]),by = list(store,month)][,row1]] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读