2017-07-12 5 views
0

私は約400のデータフレームのリストを持っており、各データフレームの特徴を抽出したい。機能はすべてのデータフレームで同じになります。rの複数のデータフレームのリストにスライディングウィンドウを適用できますか?

データフレームは加速度計からの信号で構成されていますが、私はさまざまなアクティビティを識別するために分類を適用します。私のクラスは特定のパターンに基づいているので、私はウィンドウ(windowing)に基づいて私の特徴(統計的および周波数領域の特徴)が必要です。

私はそれをデータフレームのリストに直接入れることはできますか?フィーチャを抽出し、新しいフィーチャ列を各データフレームのリストに追加し直しますか?

アドバイスをいただければ幸いです。ハマった。私は各データフレームでそれを行う方法を知っていますが、その量のデータフレームでは非常に時間がかかります。

リストの例

# Dataframes, x and y are accelerometer measurements and a is annotation 
df1 <- data.frame(x = runif(10), y = runif(10), a = sample(c(1,2), 10, replace = TRUE) 
df2 <- data.frame(x = runif(10), y = runif(10), a = sample(c(1,2), 10, replace = TRUE) 
lst <- list(df1, df2) 

計画は、各データフレームのための多くの機能で終わるし、その後特徴選択し、次に分類のために一緒にすべてのデータフレームをマージすることです。

答えて

1

zoo::rollapply()lapply()の組み合わせは、このトリックを行う必要があります。

set.seed(1) 
df1 <- data.frame(x = runif(10), 
        y = runif(10), 
        a = sample(c(1,2), 10, replace = TRUE)) 
df2 <- data.frame(x = runif(10), 
        y = runif(10), 
        a = sample(c(1,2), 10, replace = TRUE)) 
lst <- list(df1, df2) 

library(zoo) 

lst_w <- lapply(lst, function(x) { 
    cbind(x, a_w=rollapply(x$a, 3, mean, partial=TRUE)) 
    }) 

これは、各データフレームにカラムaの(平均)ウィンドウバージョンを追加します。

lapply(lst_w, head, 3) 
# [[1]] 
      # x   y a  a_w 
# 1 0.2655087 0.2059746 2 1.500000 
# 2 0.3721239 0.1765568 1 1.666667 
# 3 0.5728534 0.6870228 2 1.333333 

# [[2]] 
      # x   y a  a_w 
# 1 0.4820801 0.8209463 1 1.500000 
# 2 0.5995658 0.6470602 2 1.333333 
# 3 0.4935413 0.7829328 1 1.333333 

rollapply()コールで平均を置き換えることができます。

+0

ありがとうございましたAkselA、私は試してみましたこれは私が望んだものです。これがうまくいくかどうかはわかりませんでした。私はすべてのデータフレームをリストから外して、それぞれのデータフレームで作業しなければならないのではないかと心配しました。 – nkl1

関連する問題