【发布时间】:2017-03-10 09:40:16
【问题描述】:
我有以下数据框:
library(rvest)
library(XML)
library(tidyr)
library(zoo)
library(chron)
library(lubridate)
library(stringr)
page.201702050atl = read_html("http://www.pro-football-reference.com/boxscores/201702050atl.htm")
comments.201702050atl = page.201702050atl %>% html_nodes(xpath = "//comment()")
pbp.201702050atl = comments.201702050atl[45] %>% html_text() %>% read_html() %>% html_node("#pbp") %>% html_table()
colnames(pbp.201702050atl) = c('Quarter', 'Time', 'Down', 'ToGo', 'Location', 'Detail', 'Away.Score', 'Home.Score', 'EPB', 'EPA', 'Win.pct')
pbp.201702050atl.a = pbp.201702050atl[-union(which(pbp.201702050atl$Quarter == '1st Quarter'), which(pbp.201702050atl$Quarter == 'Quarter')), ]
pbp.201702050atl.b = pbp.201702050atl.a[-union(which(pbp.201702050atl.a$Quarter == '2nd Quarter'), which(pbp.201702050atl.a$Quarter == '3rd Quarter')), ]
pbp.201702050atl.c = pbp.201702050atl.b[-union(which(pbp.201702050atl.b$Quarter == '4th Quarter'), which(pbp.201702050atl.b$Quarter == 'Overtime')), ]
pbp.201702050atl.d = pbp.201702050atl.c[-which(pbp.201702050atl.c$Quarter == 'End of Overtime'), ]
我想创建一个新的数据框,将 pbp.201702050atl.d$Location 拆分为两列,以便字符元素组成一列,数字元素组成另一列,如下所示:
V1 V2
1 "ATL" "35"
2 "NWE" "25"
3 "NWE" "34"
4 "NWE" "34"
5 "NWE" "34"
6 "NWE" "34"
7 "ATL" "34"
8 "ATL" "34"
9 "ATL" "34"
10 "" "50"
...
为此,我写了:
Location.201702050atl = as.data.frame(str_split_fixed(as.character(pbp.201702050atl.d$Location), boundary("word"), n = 2))
虽然接近我想要的,但这个函数会导致:
V1 V2
1 "ATL" "35"
2 "NWE" "25"
3 "NWE" "34"
4 "NWE" "34"
5 "NWE" "34"
6 "NWE" "34"
7 "ATL" "34"
8 "ATL" "34"
9 "ATL" "34"
10 "50" ""
...
通知 Location.201702050atl[10,]。此函数仅在 Location.201702050atl$V2 中放置字符,前提是对于该行,原始列包含由空格分隔的两组字符。相反,我想在 Location.201702050atl$V1 中放置相似的(文本)字符,在 Location.201702050atl$V2 中放置相似的(数字)字符。当整个列实际上必须具有相同的格式时,如何根据其字符的自然格式拆分一列的元素,而不管其组成字符的自然格式如何?非常感谢您的帮助,谢谢。
【问题讨论】: