【发布时间】:2016-01-06 21:37:34
【问题描述】:
我有一个包含两列的数据框,最后一列有重复:
#reproducible data
my.df <- data.frame(nr = paste(1:6,1,sep="_"),
text = c("aa","bb","aa",NA,"bb","xxxx"))
nr text
1 1_1 aa
2 2_1 bb
3 3_1 aa
4 4_1 <NA>
5 5_1 bb
6 6_1 xxxx
我想对第一列中的值进行分组,然后添加第二列的值。我找到了一种方法来做到这一点:
apply(aggregate(nr~text, my.df, FUN=function(x) paste0(x, collapse = "/"))[,c(2,1)],1,FUN=function(x) paste(x[1],x[2], sep = ": "))
这给出了:
"1_1/3_1: aa" "2_1/5_1: bb" "6_1: xxxx"
这是我想要的结果,但代码似乎很长。我有一种感觉,一定有更好的,也许也更快的方法来做到这一点?
哦,是的,应该从结果中删除 NA。
编辑:
感谢您的所有回答。我认为会有比我自己的解决方案更简单的解决方案,但显然没有。可读性(恕我直言)非常主观,所以我做了一个基准测试:
microbenchmark(RHA(my.df),Heroka_DT(my.df),Heroka_Base(my.df),Jubbles(my.df),times=100L)
Unit: milliseconds
expr min lq mean median uq
RHA(my.df) 9.116587 9.315988 9.662611 9.572361 10.036792
Heroka_DT(my.df) 12.148374 12.448035 13.009290 12.766685 13.475480
Heroka_Base(my.df) 2.947448 6.910890 7.475239 7.172847 7.614657
Jubbles(my.df) 16.615067 40.609642 42.265267 41.799625 43.056632
max neval
10.78943 100
21.12477 100
15.97665 100
61.68414 100
在这种情况下,基础解决方案显然比其他解决方案更快。由于 Heroka 有最短和最快的解决方案,我会接受他的回答。
【问题讨论】:
标签: r string performance