列1の係数変数と列2以降の年単位のデータを使用して、ワイドフォーマットのデータフレームのリストを持っています。私はこれらのデータをグラフにしたい。これを行うには、長い形式に整形する必要があります。入力用のオブジェクトを使用して、幅広い形から長形に変更する
# SAMPLE DATA
x <- structure(list(State = structure(1:3, .Label = c("Alabama", "Alaska", "Arizona", "Arkansas"), class = "factor"), Green.And.Blue.Score.2001 = c(0L, 40L, 65L), Green.And.Blue.Score.2002 = c(20L, 5L, 60L), Green.And.Blue.Score.2003 = c(35L, 15L, 30L)), .Names = c("State", "Green.And.Blue.Score.2001", "Green.And.Blue.Score.2002", "Green.And.Blue.Score.2003"), row.names = c(NA, 3L), class = "data.frame")
x
# State Green.And.Blue.Score.2001 Green.And.Blue.Score.2002 Green.And.Blue.Score.2003
#1 Alabama 0 20 35
#2 Alaska 40 5 15
#3 Arizona 65 60 30
私は通常、このreshape()
を使用してください:ここで1つのデータフレームの例があります。例えば、これは正常に動作します:
# RESHAPE WIDE TO LONG (MANUALLY)
y <- reshape(x,
idvar = 'State',
varying = c('Green.And.Blue.Score.2001', 'Green.And.Blue.Score.2002', 'Green.And.Blue.Score.2003'),
v.names = 'Green.And.Blue.Score.',
times = c('2001', '2002', '2003'),
direction = 'long')
y
# State time Green.And.Blue.Score.
# Alabama 2001 0
# Alaska 2001 40
# Arizona 2001 65
# Alabama 2002 20
# Alaska 2002 5
# Arizona 2002 60
# Alabama 2003 35
# Alaska 2003 15
# Arizona 2003 30
しかし、私は手動で入力するidvar
、varying
、v.name
、そして私が持っているデータフレームの数十のためtimes
変数、およびいくつかのためを持っている必要はありませんでした列名はかなり長くて複雑であり、データフレームからデータフレームまでかなり変化します。単純なreshape()
コマンドはそれらを自動的に解読できません。私の考えは以下の通りの前駆体である、データフレームからそれらの入力を得るために、関数を作成することであった。
# RESHAPE WIDE TO LONG (FUNCTIONALIZED)
id <- noquote(paste("'", names(x[1]), "'", sep = ""))
va <- noquote(paste("c('", paste(names(x)[2:length(x)], collapse = "', '"), "')", sep = ""))
vn <- noquote(paste("'", sub("(\\..*)$", ".", names(x)[2]) , "'", sep = ""))
ti <- noquote(paste("c('", paste(sub(".*(\\d{4})$", "\\1", names(x[2:length(x)])), collapse = "', '"), "')", sep = ""))
これらのマッチの各idvar
、varying
、v.name
、そして#RESHAPE WIDE TO LONG (MANUALLY)
からtimes
入力の出力上記:
id
# 'State'
va
# c(''Green.And.Blue.Score.2001', ''Green.And.Blue.Score.2002', ''Green.And.Blue.Score.2003')
vn
# ''Green.And.Blue.Score.'
ti
# c('2001', '2002', '2003')
しかし、私はreshape()
機能でこれらのオブジェクトを使用しようとすると、私はエラーメッセージが表示されます:
y <- reshape(x,
idvar = id,
varying = va,
v.names = vn,
times = ti,
direction = 'long')
Error in [.data.frame(data, , varying[[i]][1L]) : undefined columns selected
「functionalizeする」という私の解決策は理想的ではありません。代わりに私は何をしなければなりませんか?
'noquote'関数はRを生成しません。あなたが期待しているように見える表現。これは、まだ文字値であるクラスnoquoteの項目を返しますが、それは異なるprint-to-consoleメソッドを持ちます。それを囲む 'paste'-ng引用符はさらに混乱を招くでしょう。 –