R 如何从excel/.csv/任何文件中读取和处理包含子列的列?
我尝试读取一个Excel文件,其中我也需要读取子列,但没有找到解决方法 Excel文件包含以下数据:R 如何从excel/.csv/任何文件中读取和处理包含子列的列?,r,dataframe,R,Dataframe,我尝试读取一个Excel文件,其中我也需要读取子列,但没有找到解决方法 Excel文件包含以下数据: | Sl No. | Sales 1 | Sales 2 | % Change | | | 1 Qtr | % Qtr | 2 Qtr| % Qtr | | | 1 | 134 | 67 | 175 | 74 | 12.5 | 导入后,我可以将数据视为 |
| Sl No. | Sales 1 | Sales 2 | % Change |
| | 1 Qtr | % Qtr | 2 Qtr| % Qtr | |
| 1 | 134 | 67 | 175 | 74 | 12.5 |
导入后,我可以将数据视为
| Sl No. |Sales 1| ...3 |Sales 2 | ...5 | % Change |
| NA | 1 Qtr | % Qtr | 2 Qtr | % Qtr | NA |
| 1 | 134 | 67 | 175 | 74 | 12.5 |
我尝试了几种方法来合并“Sales 1&…3和Sales 2&…5”,并将1个Qtr、%Qtr、2个Qtr、%Qtr保留为子列,但无法这样做
我需要它像
| Sl No. | Sales 1 | Sales 2 | % Change |
| | 1 Qtr | % Qtr | 2 Qtr| % Qtr | |
| 1 | 134 | 67 | 175 | 74 | 12.5 |
不幸的是,R不允许多个colname。因此,使用base R可以做的最简单的事情可能是组合colname,然后去掉第一行
library(openxlsx)
x <- read.xlsx("your_file.xlsx")
# Sl.No Sales.1 X3 Sales.2 X5 %Change
# 1 NA 1 Qtr %Qtr 2 Qtr %Qtr NA
# 2 1 134 67 175 74 12.5
colnames(x) <- paste0(colnames(x),ifelse(is.na(x[1,]),"",paste0(" - ", x[1,])))
x <- x[-1,]
# Sl.No Sales.1 - 1 Qtr X3 - %Qtr Sales.2 - 2 Qtr X5 - %Qtr %Change
# 2 1 134 67 175 74 12.5
colnames(x)
# [1] "Sl.No" "Sales.1 - 1 Qtr" "X3 - %Qtr" "Sales.2 - 2 Qtr" "X5 - %Qtr" "%Change"
库(openxlsx)
这与你之前的问题有什么不同?还没有找到答案。所以,这里提出一个有更多事实的问题。如果可以,请提供帮助。作为数据对象(data.frame),您不能有这样的列,但作为数据的表示,请查看。提供示例数据:dput(head(myImportedExcelFile))
。我不知道任何数据库可以存储这样的格式。我认为您的预期输出对数据库不友好。我最初也是这样做的,但由于某些原因,客户期望报告的方式与我在问题末尾提到的方式相同。还有希望吗?您可以再次将其导出到excel并手动更改colname,或者您可以将colname拆分,像以前一样插入第一行,作为流程的最后一步。不幸的是,可能没有更好的解决方案。我同意你@alex_555的观点,但事实是——这种文件是通过作业提供给我们的,需要提供,然后通过R编程推送到数据库。所以在文件中手动更改的想法是行不通的。有时我不得不克服同样的问题。我个人更喜欢合并colnames,最后再将它们分开。这不是一个很好的解决方案,但它可能是唯一有效的方法(依赖于数据库)。另一个解决方案是,如果您有权访问数据库,则可以更改数据库的输出格式。长格式可能是数据集避免多个标题的一个想法。