2

重複の可能性:
2 つのヘッダーを含む csv を data.frame に読み込む

私はRを初めて使用し、Rを使用していくつかのデータを分析しようとしています。データはたまたま Excel 形式であり、現在、R に適した形式に変換する方法を見つけるのに苦労しています。

問題は、列ヘッダーがセルを結合しているため、実際にはヘッダーに 2 つの行があることです。これを通常の 1 次元ベクトルのセットに変換し、列と行を追加したいと思います。例を挙げて説明しましょう:

現在、Excel 形式は次のようになっています。

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

H、J はマージされた列ヘッダーであり、それぞれが列 M と F にまたがっています。

= は、上の行がヘッダー行であることを示します

H、J の両方が R などの下の要素であることを考えると、これを次のように、通常のヘッダーと 2 つの行を持つ列形式に変換したいと思います。

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

これを行う方法を知っている人はいますか?

4

1 に答える 1

1

まず、いくつかの仮定:

  • 結合された見出しは CSV の最初の行にあります
  • マージされた見出しは、CSV の 2 列目から始まります
  • CSV の 2 行目の変数名の繰り返し (1 列目の変数を除く)

第二に、あなたのデータです。

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)))

4 つ目は、データの実際の再形成です。

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
于 2012-08-26T18:05:28.803 に答える