在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