2016-03-15 78 views
2

试图将结果列从df2分离为2个单独的列(“Winner”,“Loser”),并使用下面的代码从每个新列中删除数字,但会收到以下错误消息。进行纠正?dplyr单独返回错误

df2 <- data.frame(Year = c(2015:1903), Results = c("Winner", "Loser")) 
df2 %>% separate(type, c("Winner", "Loser"), ",") 

Error in if (!after) c(values, x) else if (after >= lengx) c(x, values) else c(x[1L:after], : 
argument is of length zero 

DF2

Year        Results     MVP 
1 2015       Royals 4, Mets 1  Salvador Perez 
2 2014      Giants 4, Royals 3 Madison Bumgarner 
3 2013     Red Sox 4, Cardinals 2   David Ortiz 
4 2012      Giants 4, Tigers 0  Pablo Sandoval 
5 2011     Cardinals 4, Rangers 3  David Freese 
. 
. 
125 1906  Chicago White Sox 4, Chicago Cubs 2     -- 
126 1905   NY Giants 4, Philadelphia A's 1     -- 
128 1903   Boston Red Sox 5, Pittsburgh 3     -- 
+1

你已经检查了'DF2 <做到这一点 - 数据。框架(...'这是给我错误 – akrun

+0

你也可以使用'separate_' –

回答

5

这里是separate()一个解决方案。在您的代码,你有separate()type。您可能要仔细检查。在这里,我创建了一个示例数据帧calle d df2并做了以下工作。首先,我删除了Results中的空格和数字。然后,我使用separate()分隔了列。

library(dplyr) 
library(tidyr) 

mutate(df2, Results = gsub(pattern = "\\s|\\d+", replacement = "", x = Results)) %>% 
separate(col = "Results", into = c("Winner", "Loser"), sep = ",") 

# Year Winner  Loser 
#1 2000 Royals  Mets 
#2 2001 Giants Royals 
#3 2002 RedSox Cardinals 
#4 2003 Giants Tigers 
#5 2004 Cardinals Rangers 

DATA

df2 <- structure(list(Year = 2000:2004, Results = c("Royals 4, Mets 1", 
"Giants 4, Royals 3", "Red Sox 4, Cardinals 2", "Giants 4, Tigers 0", 
"Cardinals 4, Rangers 3")), .Names = c("Year", "Results"), row.names = c(NA, 
-5L), class = "data.frame") 

# Year    Results 
#1 2000  Royals 4, Mets 1 
#2 2001  Giants 4, Royals 3 
#3 2002 Red Sox 4, Cardinals 2 
#4 2003  Giants 4, Tigers 0 
#5 2004 Cardinals 4, Rangers 3 
+0

谢谢你的解决方案 – danielhong

+0

@da尼尔红乐趣。 :) – jazzurro

+0

如果你不介意,后续的问题,当我试图总结胜利者和输家,我不能这样做,我需要创建一个新的data.frame? – danielhong

3

您也可以使用tidyr::extract(使用@jazzurros数据)单个呼叫

extract(df2, 
     "Results", c("Winner", "Loser"), 
     "([[:alpha:] ]+)\\s+\\d+,\\s+([[:alpha:] ]+)\\s+\\d+") 
# Year Winner  Loser 
# 1 2000 Royals  Mets 
# 2 2001 Giants Royals 
# 3 2002 Red Sox Cardinals 
# 4 2003 Giants Tigers 
# 5 2004 Cardinals Rangers 
+0

谢谢你的解决方案 – danielhong