2

関数に問題がありreshape()ます。形状を変更すると、たとえば、すべての変数名が「value.var1」に変更されます。

私が形を変えるために使用しているコードは次のとおりです。

test<- reshape(cdc_city, idvar= "site", timevar="variable", 
               direction="wide", new.row.names=FALSE)

「new.row.names=FALSE」の部分を間違って使用していると思います。NULLの代わりにFALSEを使用しようとしましたが、それも機能しませんでした。

私の目的は、データセットを次のように変換することです。

site    variable    value
site 1  var 1       4
site 1  var 2       7
site 1  var 3       2
site 1  var 4       6
site 1  var 5       3
site 2  var 1       89
site 2  var 2       43
site 2  var 3       12
site 2  var 4       54
site 2  var 5       23
site 3  var 1       76
site 3  var 2       62
site 3  var 3       13
site 3  var 4       43
site 3  var 5       23

次のようなデータセットに:

site    var 1    var 2    var 3    var 4    var 5
1       4        7        2        6        3
2       89       43       12       54       23
3       76       62       13       43       23

誰かが「価値」を取り除く方法を知っているなら。私の変数名の先頭に表示されます、それは素晴らしいことです!または、私が使用できるより良いコードがあれば、私はそれにも非常にオープンです。

ありがとう、

ティモシー

4

3 に答える 3

4

このような形状変更にxtabsは、次の場合にも役立ちます。

xtabs(value ~ site + variable, data = cdc_city)
#         variable
# site     var 1 var 2 var 3 var 4 var 5
#   site 1     4     7     2     6     3
#   site 2    89    43    12    54    23
#   site 3    76    62    13    43    23

しかし、あなたの質問に関しては、私は実際にはこれを「問題」とは見ていません。それはまさにそれが機能することになっている方法です。

次のシナリオを考えてみましょう。に別の列がありdata.frame(これを「その他」と呼びます)、データセット全体を長いものから広いものに再形成したいと考えています。

サンプルデータと出力は次のとおりです。

set.seed(1)
cdc_city$other = sample(1:20, 15, replace=TRUE)
reshape(cdc_city, direction="wide", 
        idvar="site", timevar="variable")
#      site value.var 1 other.var 1 value.var 2 other.var 2 value.var 3
# 1  site 1           4           6           7           8           2
# 6  site 2          89          18          43          19          12
# 11 site 3          76           5          62           4          13
#    other.var 3 value.var 4 other.var 4 value.var 5 other.var 5
# 1           12           6          19           3           5
# 6           14          54          13          23           2
# 11          14          43           8          23          16

私の意見では、この場合、変数名にとを付けることが不可欠ですvalueother

最後に、あなたnew.row.namesの不幸は行名ではなく列名にあるので、ここではあなたの議論は役に立たない。

アップデート

私は代替案を共有したいのでaggregate、構文を理解するのもかなり簡単な、を探索することに興味があるかもしれません。

aggregate(list(var = cdc_city$value), 
          list(site = cdc_city$site), c)
#     site var.1 var.2 var.3 var.4 var.5
# 1 site 1     4     7     2     6     3
# 2 site 2    89    43    12    54    23
# 3 site 3    76    62    13    43    23

を使用すると、結果の変数の名前aggregateある程度制御できます。

于 2012-08-13T16:05:53.083 に答える
2

代わりにパッケージを使用することをお勧めします-組み込みよりもreshape2はるかに使いやすく、次のようになりmeltます。dcastreshape()

library(reshape2)
dcast(cdc_city, site~variable, mean)
    site var 1 var 2 var 3 var 4 var 5
1 site 1     4     7     2     6     3
2 site 2    89    43    12    54    23
3 site 3    76    62    13    43    23
于 2012-08-13T14:55:47.047 に答える
1

はい、これは組み込みで実行できますbase::reshape()

の場合、引数direction=="wide"付きのリストを使用して、再形成された変数の名前を変更できます。varyingあなたが発見したように、はのようなreshape 列名を生成します`v.name`.`times`Rのドキュメントvaryingは、それが名前のベクトルを受け入れることを誤って示唆しています(それはのためにそうしますdirection=="long")。

cdc_city <- data.frame(
    site=paste("site", rep(1:3, each=5)),
    variable=paste("var", rep(1:5, 3)), 
    value=c(4,7,2,6,3,89,43,12,54,23,76,62,13,43,23))

#       site variable value
#  1  site 1    var 1     4
#  2  site 1    var 2     7
#  3  site 1    var 3     2
#  4  site 1    var 4     6
#  5  site 1    var 5     3
#  6  site 2    var 1    89
#  7  site 2    var 2    43
#  8  site 2    var 3    12
#  9  site 2    var 4    54
#  10 site 2    var 5    23
#  11 site 3    var 1    76
#  12 site 3    var 2    62
#  13 site 3    var 3    13
#  14 site 3    var 4    43
#  15 site 3    var 5    23

test <- reshape(cdc_city,
    varying=list(c("var 1", "var 2", "var 3", "var 4", "var 5")),
    idvar= "site", timevar="variable", direction="wide")

#       site var 1 var 2 var 3 var 4 var 5
#  1  site 1     4     7     2     6     3
#  6  site 2    89    43    12    54    23
#  11 site 3    76    62    13    43    23

文字列が要素であるdata.framesに注意してください。varyingdata.frameの要素から直接を使用して指定できます

reshape( ..., varying=list(as.character(unique(cdc_city$variable))), ...)
于 2016-11-30T23:52:20.503 に答える