【发布时间】:2015-11-14 00:59:05
【问题描述】:
我需要处理受密码保护的 Excel (xlsx) 工作簿中提供的数据。出于法律原因,我无法创建不受保护的 Excel 文件或 csv 文件等并从那里进行处理。没有一个 Excel 导入包可以处理受密码保护的工作簿。
从这个答案Import password-protected xlsx workbook into R 我已经设法提取数据。但是,它是以字符列表格式导入的。我的列表的输出如下所示:
list(list("ID", "ID1", "ID2"),
list("V2", NULL, "text2"),
list("Name", "John Smith", "Mary Brown"),
list("Score", 1, 2),
list("email", "JS@gmail.com", "MB@gov.uk"))
我想要的是一个带有列 ID、V2 等的数据框,如下所示:
ID V2 Name Score email
ID1 NULL John Smith 1 JS@gmail.com
ID2 text2 Mary Brown 2 MS@gov.uk
原始 Excel 工作簿中存在空单元格,因此使用 unlist 的解决方案将不起作用。
结合R list to data frame 和其他类似问题的答案,我得到以下代码(其中 listform 是列表的名称):
matform <- as.matrix(sapply(listform, function(s) s)) # retains empty
df <- data.frame(matform[2:nrow(matform),])
names(df) = matform[1,]
这很接近,但数据框将列表作为列。所以str(df) 产生:
'data.frame': 2 obs. of 5 variables:
$ ID:List of 2
..$ : chr "ID1"
..$ : chr "ID2"
$ V2:List of 2
..$ : NULL
..$ : chr "text2"
and so on
【问题讨论】:
-
你能分享一个缺少数据的例子吗?
-
对于我最初认为解决方案将是一行的问题来说,这是一个令人惊讶的棘手问题。
-
已修改示例数据,因此存在 NULL 值。这打破了 unlist 的所有答案。