2016-04-19 4 views
0

私は、それぞれが与えられた条件でデータを表すいくつかのデータフレームを持っています。その属性値からリスト内のデータフレームを見つける方法は?

たとえば、df.1は温度t1で測定したデータ、df.2は温度t2で測定したデータなどです。

各データフレームに属性温度を設定し、すべてのデータフレームをリストに格納しました。

ここで、ある温度のデータフレームを取得します。

  • 属性/リストのアプローチをお勧めです:

    だから私は2つの質問がありますか?

  • 適切な温度のデータフレームを取得するためのエレガントな方法はありますか?私はforループの方法を見ていますが、より良い解決策があるのだろうかと思います。ここで

はサンプルコードです:

x <- seq(0, 50, by = 0.1) 
y1 <- sin(x) 
y2 <- cos(x) 
df.1 <- data.frame(time = x, value = y1) 
attr(df.1, "Temperature") <- 20.0 
df.2 <- data.frame(time = x, value = y2) 
attr(df.2, "Temperature") <- 30.0 

df.list <- list(df.1, df.2) 

result <- NULL 
for (df in df.list) { 
    if (attr(df, "Temperature") == 20) { 
    result <- df 
    } 
} 
+1

期待される出力を持つ小さな再現可能な例を表示してください – akrun

+1

data.framesのリストである必要がありますか?なぜ、一時列を持つ単一のdata.frameはありませんか? – JeremyS

+0

私はリストである必要はありません。これはリストです。なぜなら、各データフレームを別のファイル(forループを使用して)で読み込み、リストを作成するのが最も簡単な方法に見えたからです。しかし、それは私の2つの質問のうちの最初のものでした:私のデータを保存するためのより良い/より効率的な方法がありますか? – Ben

答えて

0

最後に、私はJeremySのソリューションを選択しました。データフレームに温度列を追加しました。

x <- seq(0, 50, by = 0.1) 
y1 <- sin(x) 
y2 <- cos(x) 
df.1 <- data.frame(time = x, value = y1, Temperature = 20.0) 
df.2 <- data.frame(time = x, value = y2, Temperature = 30.0) 

df.combined <- rbind(df.1, df.2) 

result <- subset(df.combined, df.combined$Temperature == 20) 

私は本当にパフォーマンスとメモリコストの面で影響が何であるかを知らないが、Rとggplotは、データフレームではなく、リストのために設計されているように見えます。したがって、純粋なデータフレームアプローチを使用することが最も便利な方法です。

0

それが作成したリストに適切な名前を提供することをお勧めします、例えば

names(df.list) <- c("t20", "t30") 

このようにして、名前に応じて適切な表を呼び出すことができます。

head(df.list[["t20"]]) 
    time  value 
1 0.0 0.00000000 
2 0.1 0.09983342 
3 0.2 0.19866933 
4 0.3 0.29552021 
5 0.4 0.38941834 
6 0.5 0.47942554 

head(df.list[["t30"]]) 
    time  value 
1 0.0 1.0000000 
2 0.1 0.9950042 
3 0.2 0.9800666 
4 0.3 0.9553365 
5 0.4 0.9210610 
6 0.5 0.8775826 
関連する問題