将xlsx文件中的水平(基于行)数据读入Rdataframe

这是与此相关的“让我们试试另一种方式”的post:

是否可以定义/修改一个阅读function

  • 可以处理存储在xlsx文件中的数据是基于行的事实(即,每一行代表一个variables)

  • 并相应地转换它,所以它可以存储在一个基于列的 data.frame (即曾经是xlsx成为一

  • 同时捕获基于行的variables的基础类/数据types

关于csv文件,我可能会开始转向readLines ,但不幸的是xlsx对我来说仍然是一个黑盒子。

这里有一个xlsx文件,它提供了两种数据方向的示例: https : //github.com/rappster/stackoverflow/blob/master/excel/row-and-column-based-data.xlsx

稍微修改xlsx包中的read.xlsx函数:

 library(xlsx) read.transposed.xlsx <- function(file,sheetIndex) { df <- read.xlsx(file, sheetIndex = sheetIndex , header = FALSE) dft <- as.data.frame(t(df[-1]), stringsAsFactors = FALSE) names(dft) <- df[,1] dft <- as.data.frame(lapply(dft,type.convert)) return(dft) } # Let's test it read.transposed.xlsx("row-and-column-based-data.xlsx", sheetIndex = 2) # variable var_1 var_2 var_3 #1 2016-01-01 1 a TRUE #2 2016-01-02 2 b FALSE #3 2016-01-03 3 c TRUE 
  > library(openxlsx) > library(reshape) > x=read.xlsx("row-and-column-based-data.xlsx",sheet = 2); > x variable 2016-01-01 2016-01-02 2016-01-03 1 var_1 1 2 3 2 var_2 abc 3 var_3 TRUE FALSE TRUE > y=t(x) > colnames(y)=y[1,] > y=y[2:nrow(y),] > cc=data.frame(y, stringsAsFactors = F) > cc var_1 var_2 var_3 2016-01-01 1 a TRUE 2016-01-02 2 b FALSE 2016-01-03 3 c TRUE > sapply(cc, class) var_1 var_2 var_3 "character" "character" "character" > write.csv(cc,"temp.csv") > bb=read.csv("temp.csv") #infer magically types > bb X var_1 var_2 var_3 1 2016-01-01 1 a TRUE 2 2016-01-02 2 b FALSE 3 2016-01-03 3 c TRUE > sapply(bb, class) X var_1 var_2 var_3 "factor" "integer" "factor" "logical" 

或者使用stringsAsFactors = F如果你喜欢字符数据types:

 > bb=read.csv("temp.csv", stringsAsFactors = F) #infer magically types > bb X var_1 var_2 var_3 1 2016-01-01 1 a TRUE 2 2016-01-02 2 b FALSE 3 2016-01-03 3 c TRUE > sapply(bb, class) X var_1 var_2 var_3 "character" "integer" "character" "logical"