【发布时间】:2015-11-08 06:56:31
【问题描述】:
我需要一些帮助来转换我的数据集。我将不胜感激任何帮助或反馈。
我有过去 50 年的大学橄榄球分数数据。我目前有一个如图 1 所示的数据框,我需要获得一个类似于图 2 的数据框。我想要获得的数据框需要有一个每年参加的所有球队的串联列表,还有两列分别记录胜负。串联列表必须针对每一年。所以基本上是一个像图 2 一样的数据框,但每年都有单独的数据。
这是获得类似于我在图一中的清理数据帧的代码。
# Make generic data frame and get data
practice = data.frame('a'=character(), 'b'=character(), 'c'= numeric(), 'd'=character(), 'e'= numeric(), 'f'=character())
widths = c(10, 28, 5, 28, 3, 19)
years = 1960:2010
for (i in years){
football_page = paste('http://homepages.cae.wisc.edu/~dwilson/rsfc/history/howell/cf', i, 'gms.txt',sep = '')
get_data = read.fwf(football_page, widths)
practice = rbind(practice, get_data)
}
heading = list('DATE', 'AWAY TEAM', 'AWAY SCORE', 'HOME TEAM', 'HOME SCORE', 'LOCATION')
colnames(practice) = heading
# Fixing season dates
practice = cbind('SEASON'=numeric(nrow(practice)),practice)
fix_date = matrix(0, nrow = nrow(practice))
for (j in 1:nrow(fix_date)){
fix_date[j,1] = substr(practice[j,2],7,10)
}
fix_date = as.numeric(fix_date)
practice$SEASON = fix_date
for (j in 1:nrow(practice)){
if (grepl('01/.......', practice[j,2]))
practice[j,1] = practice[j,1]-1
}
#fix names
practice[,3]=gsub(' ','',practice[,3])
practice[,5]=gsub(' ','',practice[,5])
#drop location and columns
practice = practice[, -7]
practice = practice[, -2]
数据集称为练习。
【问题讨论】:
-
有几种方法可以做到这一点。我可能会使用
dplyr并编写一个函数来过滤单个团队(主队或客队)的数据,按年份分组,并计算和总结输赢。您可以lapply将该函数用于唯一团队名称的向量,然后将结果列表合并到单个数据框中。你试过什么没用? -
感谢您的回复!不幸的是,我只被允许使用来自基本 R 的代码,所以我不能使用 dplyR。我尝试了很多不同的事情,并且只用了一年就得到了正确的结果,但是当我尝试做很多年之后,计算时间就会成倍增长,并给我带来奇怪的结果。你想看代码吗?
-
你能给我一个你将如何使用 dplyr 的例子吗? @ulfelder
-
胜负应该比较直接。您基本上只需要添加
winning_team和losing_team辅助列并在这些列上创建表,然后进行合并。大概您还有另一个为团队分配索引的数据框。你需要它来创建你的对手栏, -
如果我上传数据集,图1中的那个,你能试试吗?我对 R 比较陌生,这绝对是一场斗争。 @RajeshS