如何在R中的大数据框中按特定文本对行进行求和

时间:2015-12-22 15:28:59

标签: r

所以我有一个包含200多列的大型数据集。

在数据集(df)中,每个条目都按日期显示,使数据看起来像这样

Name    Passes  Goal    
Jack    7       1   
Jack    4       2   
Ali     10      1
John    5       5   

我希望它能够根据人的名字对值进行求和而不必输入名称(有超过100个不同的名字) 所以它看起来像这样:

Name    Passes  Goal    
Jack    11      3   
Ali     10      1
John    5       5   

我将如何在r?

上执行此操作

2 个答案:

答案 0 :(得分:1)

获取原始发布的htlm数据并通过rvest(见下文)阅读 您可以执行以下操作:

dat <- doc %>% html_table() %>% `[[`(1)
colnames(dat) <- dat[1,]
dat <- dat[-1,]
dat[,2:3] <- lapply(dat[,2:3], as.numeric)
aggregate(.~Date, FUN = sum, data=dat)

结果:

  Date Passes Goals
1  Ali      7     1
2 Jack     10     5
3 John     11     2

读入数据:

require(rvest)
doc <- read_html('<div class="CSSTableGenerator" >
                <table >
          <tr>
          <td>
          Date
          </td>
          <td >
          Passes
          </td>
          <td>
          Goals
          </td>
          </tr>
          <tr>
          <td >
          John
          </td>
          <td>
          5
          </td>
          <td>
          1
          </td>
          </tr>
          <tr>
          <td >
          John
          </td>
          <td>
          6
          </td>
          <td>
          1
          </td>
          </tr>
          <tr>
          <td >
          Ali
          </td>
          <td>
          7
          </td>
          <td>
          1
          </td>
          </tr>
          <tr>
          <td >
          Jack
          </td>
          <td>
          10
          </td>
          <td>
          5
          </td>
          </tr>
          </table>
          </div>')

答案 1 :(得分:1)

我认为使用 dplyr 包更容易。如果您将data.frame创建为

# install.packages("dplyr") only if not already installed
library(dplyr)
df <- data.frame(Name=c('Jack','Jack','Ali','John'), Passes=c(7,4,10,5), Goal=c(1,2,1,5))

你可以先 group_by Name变量,然后汇总其他变量:

res <- df %>% group_by(Name) %>% summarise(Tot_Passes=sum(Passes), Tot_Goals=sum(Goal))

注意:%&gt;%是&#34;管道&#34;运算符,上一个操作的结果是下一个操作的输入。