读取R中的CSV,但保留字符行名称

时间:2018-02-17 17:17:34

标签: r quantmod

我正在使用流行的R库“quantmod”,并且无法弄清楚当我将文件读取到csv时如何保留字符行名称。

例如,我将得到如下数据:

ROW NAME       VALUE
1970-05-08     .05
1970-08-01     .05
1970-12-10     .06
...            ---

当我使用

write.csv(MyData,'MyData.csv', row.names = T)

输出如下:

Column One     Column Two
1               .05
2               .05
3               .06
...             ---

如何保留字符行名称?即如何将csv中的值1实际读作1970-05-08?

谢谢!

2 个答案:

答案 0 :(得分:1)

您必须知道quantmod会返回xts-objects。所以第一列(日期)是索引。要将xts-objects写入a,比如csv-file,最简单的方法是使用write.zoo函数。

getSymbols('AAPL',from='2018-01-01’)
write.zoo(AAPL,'aapl.csv',sep=',',quote=FALSE)

quotes=FALSE删除列名称周围的引号。

答案 1 :(得分:0)

概述

在将其作为.csv文件导出之前,您需要将所需的字符行名称存储为数据框中的新列。

要避免冗余列,请在write.csv()功能中设置row.names = FALSE。将数据框导回时,请将read.csv()中的row.names设置为代表所需行名称值的列名称。

可重复的示例

此处,行名称是一个字符,代表movie in which each Star Wars character dies

# create data
df <-
  data.frame( ID = 1:3
              , Name = c( "Anakin", "Han", "Luke" )
              , stringsAsFactors = FALSE
  )

# create row names
rownames( df ) <- c( "Episode_VI", "Episode_VII", "Episode_VIII" )

# view data
df
#              ID   Name
# Episode_VI    1 Anakin
# Episode_VII   2    Han
# Episode_VIII  3   Luke

# store rownames in new column
df$row.names <- rownames( df )

# export data as CSV
write.csv( x = df
           , row.names = FALSE
           , file = "Star_Wars_data.csv"
)

# import data from CSV
df.csv <- read.csv( file = "Star_Wars_data.csv"
                , header = TRUE
                , row.names = "row.names"
                , stringsAsFactors = FALSE
)

# view data from CSV
df.csv
#              ID   Name
# Episode_VI    1 Anakin
# Episode_VII   2    Han
# Episode_VIII  3   Luke

# end of script #

另存为RDS文件

此外,您可以使用saveRDS()将数据框导出为.rds文件。此方法不要求您将行名称存储为列;相反,它只是在使用导入readRDS()时保存。

# create data
df <-
  data.frame( ID = 1:3
              , Name = c( "Anakin", "Han", "Luke" )
              , stringsAsFactors = FALSE
  )

# create row names
rownames( df ) <- c( "Episode_VI", "Episode_VII", "Episode_VIII" )

# view data
df
#              ID   Name
# Episode_VI    1 Anakin
# Episode_VII   2    Han
# Episode_VIII  3   Luke

# Export as RDS file
saveRDS( object = df
         , file = "Star_Wars_data.rds"
)

# view data
readRDS( file = "Star_Wars_data.rds" )
#              ID   Name
# Episode_VI    1 Anakin
# Episode_VII   2    Han
# Episode_VIII  3   Luke

# end of script #