2012-08-26 101 views
2

工作可能重複:
Read csv with two headers into a data.frame與合併後的列標題在Excel

我是新來的R和合作,用R分析一些數據。數據恰好是Excel格式,現在我正在努力找到一種方法將其轉換爲R-friendly格式。

問題是列標題已合併單元格,因此實際上標題有兩行。我想將它轉換爲一組一維矢量,添加一個額外的列和一行。讓我用一個例子解釋:

目前Excel格式看起來如此:

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

2H,J合併列標題和他們每個人跨越的列M和F.

的=表明,上面的行是頭行

鑑於1H,J都是下的元件,說R,我想這轉換成的柱狀格式與正常報頭和兩行,這樣

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

有沒有人有一個想法如何做到這一點?

+2

請問[此問題](http://stackoverflow.com/q/11987103/1270695)是否可以幫助您入門? – A5C1D2H2I1M1N2O1R2T1

+0

歡迎來到Stack Overflow!如果你製作了一個可重現的例子(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)來展示你的問題,我們會發現它更容易回答。 – Andrie

+0

謝謝@mrdwab你是對的,問的問題與在該文章中提到的相同。我一定錯過了尋找它! – Romit

回答

1

首先,一些假設:

  • 合併的標題是上的CSV
  • 第一行中的合併的標題在CSV
  • 變量名的在第二行中的第二列開始的CSV重複(第一列中的變量除外)

二,您的數據。

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

三,this answer一個稍微修改後的版本。

# 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 M F id 
# 1.H Y1 H V1 V2 1 
# 1.J Y1 J V3 V4 1