在Excel中处理合并的列标题

可能重复:
将两个标题的csv读取到data.frame中

我是R新手,正在努力使用R来分析一些数据。 数据恰好是Excel格式,现在我正在努力find一种方法将其转换为R友好的格式。

问题是列标题已合并的单元格,所以实际上标题有两行。 我想将它转换成一个一维vector的正常集合,添加一个额外的列和一行。 我举个例子来解释一下:

目前的Excel格式看起来如此:

| H | J | Y |M |F |M |F | == == == == == Y1|V1|V2|V3|V4| 

H,J是合并的列标题,并且它们中的每一个跨越列M和F.

=表示上面的行是标题行

既然H,J都是R下的元素,我想把它转换成一个正常的头和两行的列格式,像这样

 Y |R |M |F | == == == == Y1|H |V1|V2| Y1|J |V3|V4| 

有没有人有一个想法如何做到这一点?

首先,一些假设:

  • 合并的标题位于CSV的第一行
  • 合并的标题从CSV的第二列开始
  • CSV重复的第二行中的variables名称(第一列中的variables除外)

其次,你的数据。

 temp = c(",\"H\",,\"J\",", "\"Y\",\"M\",\"F\",\"M\",\"F\"", "\"Y1\",\"V1\",\"V2\",\"V3\",\"V4\"") 

第三, 这个答案 略有修改版本。

 # check.names is set to FALSE to allow variable names to be repeated ONE = read.csv(textConnection(temp), skip=1, check.names=FALSE, stringsAsFactors=FALSE) GROUPS = read.csv(textConnection(temp), header=FALSE, nrows=1, stringsAsFactors=FALSE) GROUPS = GROUPS[!is.na(GROUPS)] # This can be shortened, but I've written it this way to show how # it can be generalized. For instance, if 3 columns were repeated # instead of 2, the rep statement could be changed to reflect that names(ONE)[-1] = paste0(names(ONE)[-1], ".", rep(GROUPS, each=(length(names(ONE)[-1])/2))) 

第四,数据的实际重塑。

 TWO = reshape(ONE, direction="long", ids=1, varying=2:ncol(ONE)) # And, here's the output. TWO # Y time MF id # 1.H Y1 H V1 V2 1 # 1.J Y1 J V3 V4 1