dataframe名称R

我通过read.cv2()函数在R中导入一个.csv文件(来自Excel 2010)。

我得到一个dataframe 。 我的专栏名称应该是date,但我得到像X08.03.2013

我有几个问题:

  1. 如何将这些名称设置为date格式(同名行)?
  2. 对于列,一旦我获得了date格式,如何在这些date使用条件(if)?

我希望我已经清楚了。 感谢您的帮助。

这里有一个小例子供你尝试:

编写一些数据并尝试读入

 # This just creates a CSV in your current working directory to play with cat("08-03-2013;08-04-2013;08-05-2013\n0,5;0,5;0,5\n0,6;0,6;0,6\n", file = "FunkyNames.csv") read.csv2("FunkyNames.csv") # X08.03.2013 X08.04.2013 X08.05.2013 # 1 0.5 0.5 0.5 # 2 0.6 0.6 0.6 read.csv2("FunkyNames.csv", check.names = FALSE) # 08-03-2013 08-04-2013 08-05-2013 # 1 0.5 0.5 0.5 # 2 0.6 0.6 0.6 

正如你所看到的,使用read.csv2()check.names = FALSE来获取input文件中的名字。 现在,让我们使用它并尝试提取一些数据。

 temp <- read.csv2("FunkyNames.csv", check.names = FALSE) ## Our first attempt doesn't work temp$08-03-2013 # Error: unexpected numeric constant in "temp$08" ## Using quotes works temp$"08-03-2013" # [1] 0.5 0.6 ## The following would work too ## temp$`08-03-2013` ## temp$'08-03-2013' 

提取某些列的更有效的方法

提取某些列的更有效的方法是创builddata.framenames的单独向量,使用as.Date将其转换为date,然后使用该向量从原始data.frame进行子集data.frame 。 一些例子:

 tempCols <- as.Date(names(temp), format = "%m-%d-%Y") tempCols temp[tempCols > "2013-08-04"] # 08-05-2013 # 1 0.5 # 2 0.6 temp[tempCols >= "2013-08-04"] # 08-04-2013 08-05-2013 # 1 0.5 0.5 # 2 0.6 0.6 

你的两个问题的答案。

  1. 您使用check.names=FALSE参数加载您的csv
  2. 列名不能是dates 。 他们需要成为characters

但是,您可以对列名进行基于字符的search,并只select那些满足特定要求的列

 df <- as.data.frame(cbind(sample(10), sample(10))) names(df) <- c("08.03.2013", "09.03.2013") df ## 08.03.2013 09.03.2013 ## 1 8 10 ## 2 3 8 ## 3 4 3 ## 4 1 9 ## 5 5 5 ## 6 6 4 ## 7 10 6 ## 8 9 7 ## 9 2 1 ## 10 7 2 # Either do character based search using regex df[, grep("08.03.2013", names(df)), drop = FALSE] ## 08.03.2013 ## 1 8 ## 2 3 ## 3 4 ## 4 1 ## 5 5 ## 6 6 ## 7 10 ## 8 9 ## 9 2 ## 10 7 df[, grep("09.03.2013", names(df)), drop = FALSE] ## 09.03.2013 ## 1 10 ## 2 8 ## 3 3 ## 4 9 ## 5 5 ## 6 4 ## 7 6 ## 8 7 ## 9 1 ## 10 2 # Or even convert names to Dates and then compare. df[, as.Date(names(df), format = "%d.%m.%Y") == as.Date("2013-03-08"), drop = FALSE] ## 08.03.2013 ## 1 8 ## 2 3 ## 3 4 ## 4 1 ## 5 5 ## 6 6 ## 7 10 ## 8 9 ## 9 2 ## 10 7 df[, as.Date(names(df), format = "%d.%m.%Y") > as.Date("2013-03-08"), drop = FALSE] ## 09.03.2013 ## 1 10 ## 2 8 ## 3 3 ## 4 9 ## 5 5 ## 6 4 ## 7 6 ## 8 7 ## 9 1 ## 10 2