3

series_to_plot.df という data.frame があります。これは、他の多数の data.frames を組み合わせて作成したものです (以下を参照)。これらのそれぞれから .mm 列だけを取り出して、プロットできるようにします。したがって、各 data.frame の 3 番目の列 (たとえば、p3c3.mm、p3c4.mm など) を引き出したいのですが、オブジェクト内のすべての data.frames に対してこれを行う方法がわかりません。名前。これは可能ですか?

たとえば、series_to_plot.df[[3]] と series_to_plot.df[[10]] による別のセット (つまり、ベクトルのリストです..) を 1 つだけ引き出すことができ、series_to_plot.df$ で直接参照できます。 p3c3.mmですが、各data.frameからすべてのmmを含むベクトルを取得するコマンドはありますか? 次のようなインデックスが機能することを期待していました: series_to_plot.df[,3[3]] しかし、エラーが返されます[.data.frame(series_to_plot.df, , 3[3]) : undefined columns selected

series_to_plot.df
          p3c3.rd         p3c3.day    p3c3.mm      p3c3.sd                 p3c3.n p3c3.noo p3c3.no_NAs
    1     2010-01-04             0    0.1702531    0.04003364              7                1           0
    2     2010-01-06             2    0.1790594    0.04696674              7                1           0
    3     2010-01-09             5    0.1720404    0.03801756              8                0           0

          p3c4.rd         p3c4.day    p3c4.mm      p3c4.sd                 p3c4.n p3c4.noo p3c4.no_NAs
    1     2010-01-04             0    0.1076581   0.006542157              6                2           0
    2     2010-01-06             2    0.1393447   0.066758781              7                1           0
    3     2010-01-09             5    0.2056846   0.047722862              7                1           0

          p3c5.rd         p3c5.day    p3c5.mm      p3c5.sd                 p3c5.n p3c5.noo p3c5.no_NAs
    1     2010-01-04             0   0.07987147   0.006508766              7                1           0
    2     2010-01-06             2   0.11496167   0.046478767              8                0           0
    3     2010-01-09             5   0.40326471   0.210217097              7                1           0
4

3 に答える 3

4

指定した名前のすべての列を取得するには、次のようにします。

names_with_mm <- grep("mm$", names(series_to_plot.df), value=TRUE)
series_to_plot.df[, names_with_mm]

しかし、 basedata.frameがすべて同じ構造を持っている場合はrbind、次のようにできます。

series_to_plot.df <- rbind(
  cbind(name="p3c3", p3c3),
  cbind(name="p3c4", p3c4),
  cbind(name="p3c5", p3c5)
)

次に、mm値が 1 つの列に表示され、プロットが容易になります。

于 2010-02-24T20:22:33.777 に答える
2

他の回答に追加すると、変数名に有用な情報をエンコードすることはお勧めできません。すべての有用な情報が変数の値に含まれるように、データを再配置する方がはるかに優れています。適切な形式を提案するのに十分なデータセットについてはわかりませんが、次のようなものかもしれません

p c         rd day date mm sd ...
3 3 2010-10-04 ...

これを行うと、質問に対する答えは単純になりますdf$mm

外部ソースからあまり役に立たない形式でデータを取得している場合は、reshape関数またはreshapeパッケージの関数を使用して、R 内で上記のようなより有用な形式にデータを再配置できます。

于 2010-02-25T04:32:39.383 に答える
1

R 言語の定義には、インデックス作成に関する適切な情報 (セクション 3.4.1) があり、非常に役立ちます。

次に、grep() コマンドを使用して、シーケンスに一致する名前を取得できます。次に、次のようにすべてをつなぎ合わせます。

 dataWithMM <- series_to_plot.df[,grep("[P]", names(series_to_plot.df))]

少し分解するために、これは「mm」パターンに一致する列の数を取得します。

 namesThatMatch <- grep("[mm]", names(series_to_plot.df)

次に、そのリストを使用して、必要な列を呼び出します。

  dataWithMM <- series_to_plot.df[, namesThatMatch ]
于 2010-02-24T20:35:10.970 に答える