R 如何从excel/.csv/任何文件中读取和处理包含子列的列?

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 | 导入后,我可以将数据视为 |

我尝试读取一个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| ...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,最后再将它们分开。这不是一个很好的解决方案,但它可能是唯一有效的方法(依赖于数据库)。另一个解决方案是,如果您有权访问数据库,则可以更改数据库的输出格式。长格式可能是数据集避免多个标题的一个想法。