【发布时间】:2019-11-06 17:19:37
【问题描述】:
我有十几个 excel 文件的集合,我正在使用以下代码将这些文件读入 R 中的数据框列表:
data_path <- "path"
files <- dir(data_path, pattern = "*.xlsx")
data <- files %>%
map(~readWorkbook(file.path(data_path, .), sheet = "Results"))
这一切都没有问题。问题是我需要它们都以相同的格式进行进一步操作,并且由于非通用布局,有些是这样导入的:
X1 2016 2017 2018
y 12 12 12
还有其他类似的:
Result
y 2016 2017 2018
x 12 12 12
原因是因为一些 excel 文件被转发给我,顶部有一个额外的行,带有字符串字符'Results'
现在我可以通过对每个人进行直接手术来解决这个问题:
names(data) <- rbind(data[1,])
names(data)[1] <- "X1"
data <- data[-c(1),]
但这似乎是一个相当丑陋的黑客解决方案,会导致自动化问题。有没有办法使用 readWorkbook() 函数,但如果它们包含某些值则指定跳过行?
例如可能是这样的:
if value equal to 'Result' {
skipRow()
}
或者在数据框中搜索日期行并将其用作列名?
【问题讨论】:
-
使用来自
dplyr的filter(),并执行类似data %>% filter(firstcol != "Result")的操作(我假设该字符串存储在第一列,因为您提到您将所有内容都存储为数据框) . -
Dunois,由于在读入数据时出现在第一行,因此它被存储为列标题。我可以看到您来自哪里,但不确定如何实现。跨度>