在R中,如何将每个Excel行读取为新的数据框或列表?

时间:2013-09-02 13:19:34

标签: r excel import

我想构建一个包含其特征的输入变量的Excel文件。例如:

Name                Mean    sd
p.ca.revasc         0.80    0.06
p.ca.pci_revasc     0.85    0.05
p.ca.defer_xrevasc  0.40    0.09

我想将此工作表导入R,但将每一行读取为新的数据框或列表。我怎么能这样做?

换句话说,在阅读之后,我想对象和元素如下:p.ca.revasc$mean = 0.80和p.ca.revasc$sd = 0.06

你有什么建议吗?我正在尝试使用谷歌,但我很难知道提出这个问题的正确术语是什么。

2 个答案:

答案 0 :(得分:1)

首先,阅读工作表。我更喜欢将Excel工作表保存为Excel中的.csv,所以

master_df <- read.csv("excelsheet.csv")

但在某些情况下,将其保留为Excel格式更为合理

require("xlsx")
master_df <- read.xlsx2("excelsheet.xlsx", sheetName="mysheet")

最简单的方法可能是使用plyr包。如果您完全确定每行都有唯一的name列,则可以使用

require(plyr)
data_list <- dlply(master_df, .(Name), identity)

否则,您需要定义一个在每行中唯一的索引列

data_list$index <- 1:nrow(master_df)
data_list <- dlply(master_df, .(index), identity

那就是说,我想不出你真正想要这样做的情况。在大多数情况下,更好的做法是将数据保存在数据框中,并对数据框执行操作。

答案 1 :(得分:-1)

你可以在循环中完成它,但不是那么优雅。然后,您将为工作表中的每一行设置一个数据框。

dta <- read.table("test.csv", sep = ",", header=TRUE)

for(i in 1:dim(dta)[1]){
  new_str <- paste(as.character(dta$Name[i]), " <- data.frame(Mean = ", dta$Mean[i], ",sd = ", dta$sd[i], ")")
  eval(parse(text = new_str))
}