我有一个如下所示的数据集:
text id screenName retweetCount isRetweet retweeted longitude latitude
1 xx 778980737861062656 0504Traveller 0 FALSE FALSE <NA> <NA>
2 xx 778967536167559168 Iz_Azman 0 FALSE FALSE <NA> <NA>
3 yy 778962265298960384 Iz_Azman 0 FALSE FALSE <NA> <NA>
4 yy 778954988122939392 travelindtoday 2 FALSE FALSE <NA> <NA>
5 zz 778948691969224705 umtn 2 FALSE FALSE <NA> <NA>
6 zz 778942095843135493 flyinsider 0 FALSE FALSE <NA> <NA>
这些是来自R中包twittR
的推文。有些推文具有完全相同的text
但不同的retweetCount
。我想保留唯一的推文(text
),但保留那些具有最高retweetCount
的推文。 (在上面的例子中,推文1,4和5。)
我该怎么做?
答案 0 :(得分:3)
您可以使用dplyr
library(dplyr)
df %>%
group_by(text) %>%
slice(which.max(retweetCount))
#text id screenName retweetCount isRetweet retweeted longitude latitude
#(fctr) (dbl) (fctr) (int) (lgl) (lgl) (fctr) (fctr)
#1 xx 7.789807e+17 0504Traveller 0 FALSE FALSE <NA> <NA>
#4 yy 7.789550e+17 travelindtoday 2 FALSE FALSE <NA> <NA>
#5 zz 7.789487e+17 umt 2 FALSE FALSE <NA> <NA>
使用base R
和ave
的{{1}}中的另一种方法是:
order
答案 1 :(得分:2)
这个怎么样?
df
text id screenName retweetCount isRetweet retweeted longitude latitude
1 xx 7.789807e+17 0504Traveller 0 FALSE FALSE <NA> <NA>
2 xx 7.789675e+17 Iz_Azman 0 FALSE FALSE <NA> <NA>
3 yy 7.789623e+17 Iz_Azman 0 FALSE FALSE <NA> <NA>
4 yy 7.789550e+17 travelindtoday 2 FALSE FALSE <NA> <NA>
5 zz 7.789487e+17 umtn 2 FALSE FALSE <NA> <NA>
6 zz 7.789421e+17 flyinsider 0 FALSE FALSE <NA> <NA>
merge(df, aggregate(retweetCount~text, df, FUN=max), by=c('text', 'retweetCount'))
text retweetCount id screenName isRetweet retweeted longitude latitude
1 xx 0 7.789807e+17 0504Traveller FALSE FALSE <NA> <NA>
2 xx 0 7.789675e+17 Iz_Azman FALSE FALSE <NA> <NA>
3 yy 2 7.789550e+17 travelindtoday FALSE FALSE <NA> <NA>
4 zz 2 7.789487e+17 umtn FALSE FALSE <NA> <NA>
如果我们想要删除重复的转发帐户,那么我们可以尝试以下方法:
merge(df[!duplicated(df[c('text', "retweetCount")]),],
aggregate(retweetCount~text, df, FUN=max), by=c('text', 'retweetCount'))
text retweetCount id screenName isRetweet retweeted longitude latitude
1 xx 0 7.789807e+17 0504Traveller FALSE FALSE <NA> <NA>
2 yy 2 7.789550e+17 travelindtoday FALSE FALSE <NA> <NA>
3 zz 2 7.789487e+17 umtn FALSE FALSE <NA> <NA>