R导入具有多个行名称的excel矩阵

时间:2016-04-21 08:33:49

标签: r excel

我是R编程的新手。我必须将excel矩阵插入R并将其转换为普通表。 我刚开始遇到一个问题:/ excel / csv矩阵导入的确存在很多可能性,但我不知道如何让它读取更多的行名。

以下是示例:

          |  Year       a1  a2  a3
Colname1  |  ColName2   b1  b2  b3   
   c1          d1        x   x   x
   c2          d2        x   x   x
   c3          d3        x   x   x

a1,a2,a3是年份列表 b1,b2,b3是城市列表 - 此行没有名称,但应该

最后我需要做一个简单的表

Colname1,Colname1,Year,City,Data

2 个答案:

答案 0 :(得分:2)

假设您正在处理类似于以下Excel表格的数据:

Table

您可以按以下方式导入文件:

require(readxl)
xlImp <- read_excel(path = "file.xlsx", sheet = 1,
                    col_names = FALSE, na = " ")

预览

获得的对象易于操作:

> head(xlImp)
        X0          X1 X2 X3 X4
1     <NA> Year        a1 a2 a3
2 Colname1    Colname2 b1 b2 b3
3       c1          d1  1  4  7
4       c2          d2  2  5  8
5       c3          d3  3  6  9

清洗

然后,您可以使用导入的数据进行一些基本操作,例如设置列名:

# Simple cleaning
Vectorize(require)(package = c("tidyr", "dplyr", "magrittr"),
                               char = TRUE)

# Set column names
xlImp %<>% 
  setNames(gsub(".", "", make.names(paste(.[1,], .[2,])), fixed = TRUE)) %>%
  ## Clean row redundant rows
  filter(row_number() %in% 3:dim(xlImp)[2])

结果

这些简单的转换将生成(或多或少)整洁的数据框,您应该可以轻松地重塑和操作:

> head(xlImp)
Source: local data frame [3 x 5]

  NAColname1 YearColname2  a1b1  a2b2  a3b3
       (chr)        (chr) (chr) (chr) (chr)
1         c1           d1     1     4     7
2         c2           d2     2     5     8
3         c3           d3     3     6     9

答案 1 :(得分:1)

根据我的一般经验,最简单的方法是在将数据集导入到R之前将其准备好,特别是当您刚开始使用R时。因此,取决于矩阵的大小(有多少列?) ,我会考虑调整excel中的列名,即列名只使用一行,例如

Colname1  |  ColName2  | b1, a1 | b2, a2 | b3, a3   
   c1          d1           x        x        x
   c2          d2           x        x        x
   c3          d3           x        x        x

可以在此处找到有关R导入数据的精彩教程:https://www.datacamp.com/community/tutorials/r-tutorial-read-excel-into-r