我有以下示例的数据,其中包含多个类别变量和一个连续变量。我想为分类变量的每个分组在连续变量中找到记录的最后一个实例,然后将其作为新列添加到数据集中。我的数据集有两百万行,我试图找出是否有人拥有更有效的方法。我正在使用apply
而不是循环,但是它仍然很慢。预先感谢。
可复制的示例:
require(tidyr)
data(iris)
g.iris <- gather(iris, key=key, value=value, -Species)
g.iris$time <- rep(1:50, 12)
index.vector <- paste(g.iris$Species, g.iris$key, sep=" - ")
index.vector <- index.vector[!duplicated(index.vector)]
vapply(index.vector, FUN.VALUE=numeric(1), function(x) {
group <- g.iris[g.iris$Species == gsub("(^.+)( - )(.+$)", "\\1", x) &
g.iris$key == gsub("(^.+)( - )(.+$)", "\\3", x), ]
value <- group[max(group$time), "value"]
g.iris[g.iris$Species == group$Species &
g.iris$key == group$key, "last.value"] <<- value
})
答案 0 :(得分:2)
一个简单的int main(int argc, const char * argv[]) {
@autoreleasepool {
NSArray *nums = @[@(1), @(2), @(3)];
NSLog(@"%@", [nums valueForKeyPath:@"@sum.self"]);
}
return 0;
}
命令
dplyr
似乎要返回与您的代码相同的内容,但根本不会打扰xx <- g.iris %>% group_by(Species, key) %>%
mutate(last.value=value[which.max(time)])
部分。
index.vector