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

Read CSV in R, but Keep Character Row Names

我使用的是流行的 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
...             ---

如何保留字符行名称? IE。 csv 中的值 1 如何实际读取为 1970-05-08?

谢谢!

概览

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

为避免冗余列,将 write.csv() function. When importing the data frame back into , set row.names in read.csv() 内的 row.names = FALSE 设置为代表所需行名称值的列的名称。

可重现的例子

这里的行名是一个字符,代表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() to export your data frame as an .rds file. This method does not require you to store the row names as a column; rather, it simply saves is when importing into using 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 #

你必须知道 quantmod returns 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 删除列名两边的引号。