删除R中的“半复制”行

时间:2016-09-22 17:47:01

标签: r twitter duplicates

我有一个如下所示的数据集:

  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。)

我该怎么做?

2 个答案:

答案 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 Rave的{​​{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>