【问题标题】:Recognising the "-" sign and separating Data [closed]识别“-”号并分隔数据[关闭]
【发布时间】:2016-12-28 17:09:50
【问题描述】:

我是 R 的初学者。我下面的数据是由 @akrun 生成的,代码如下:

tennis4 <- structure(list(Tournament = "Win-Loss", `2005` = "3-2", `2006` = "6-4", 
`2007` = "5-2", `2008` = "12-4", `2009` = "15-4", `2010` = "16-4", 
`2011` = "21-4", `2012` = "22-3", `2013` = "17-2", `2014` = "17-4", 
`2015` = "19-4", `2016` = "19-2", `W-L` = "172-39", `Win %` = 81.52), 
.Names = c("Tournament", 
"2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", 
"2013", "2014", "2015", "2016", "W-L", "Win %"), row.names = c(NA, 
-1L), class = "data.frame")
  1. 我想将“Win-Loss”的分成“Win”和“Loss”。我的目标是将数据(“3-2”到“3”和“2”)分开并将它们存储在各自的位置,但我不知道如何让 R 将它们分开。有人可以告诉我任何将它们分开的功能吗?

  2. 将它们分开后,我可以使用哪个函数在同一张表上绘制 2 个不同的变量进行比较?

【问题讨论】:

  • tidyr::gather,tidyr::separate,但请不要发数据图片;阅读here
  • 你的预期输出是什么?
  • 很抱歉。我已经编辑了帖子,所以它不包含数据图片。嗨 akrun,我想将数字 (3,6,5) 放入名为“Win”的新行,将 (2,4,2) 放入“Loss”。

标签: r data-manipulation


【解决方案1】:

这是获取线图的一种选择

m1 <- t(sapply(tennis4[grep("^[0-9]+$", names(tennis4))], 
         function(x) scan(text=x, what = numeric(), quiet=TRUE, sep="-")))
colnames(m1) <- scan(text=tennis4[,1], what = "", quiet=TRUE, sep="-")
matplot(m1, type = "l", xaxt = "n", col = c(2, 4), ylab = "value")
axis(1, at = seq_len(nrow(m1)), labels = row.names(m1))
legend("topright", inset=.05, legend= colnames(m1), pch=1, col=c(2,4), horiz=TRUE)

数据

tennis4 <- structure(list(Tournament = "Win-Loss", `2005` = "3-2", `2006` = "6-4", 
`2007` = "5-2", `2008` = "12-4", `2009` = "15-4", `2010` = "16-4", 
`2011` = "21-4", `2012` = "22-3", `2013` = "17-2", `2014` = "17-4", 
`2015` = "19-4", `2016` = "19-2", `W-L` = "172-39", `Win %` = 81.52), 
.Names = c("Tournament", 
"2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", 
"2013", "2014", "2015", "2016", "W-L", "Win %"), row.names = c(NA, 
-1L), class = "data.frame")

【讨论】:

  • 您好 akrun,谢谢您的回答。是的,它有效。我是 R 的初学者。你介意告诉我你从哪里得到 "^[0-9]+$" 来告诉 R 负号吗?
  • @umm 它用于子集名称只有数字的列,即 2005:2016。它表示从字符串^ 的开头,匹配一个或多个数字([0-9]+)直到字符串的结尾$
  • 感谢您的解释!还有一件事,当您重新创建我的数据时,“row.names = c(NA,-1L)”的含义是什么?似乎没有这个,数据就会崩溃。
  • @umm 这是dput 的输出,即在您使用read.csv/read.table 读取数据之后。 tennis4 &lt;- read.table("yourfile.txt", header=TRUE, stringsAsFactors=FALSE, check.names = FALSE); dput(head(tennis4)) 提供该输出。
  • 谢谢阿克伦。这将使我的问题更容易理解和解决。非常感谢您的回答
猜你喜欢
  • 2018-02-09
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多