所以我有一个包含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?
上执行此操作答案 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;运算符,上一个操作的结果是下一个操作的输入。