2

異なる長さの異なる時系列を含むデータフレームのリストがあります。変数のカウントを要約し、その特定のデータセットに含まれるデータの年数で正規化したいと考えています。

サンプルデータフレームで:

data_list <- list(data.frame(temp_bin = rep(1:4, 2:5), value = runif(14)),
  data.frame(temp_bin = rep(1:4, 3:6), value = runif(18)), 
  data.frame(temp_bin = rep(1:4, 4:7), value = runif(22)))
# this might be ~10 different data sets with ~ 100k observations each

count <- lapply(data_list, function(x) {nrow(x)/5} )
#  for real data this would be divided by 8760 for the # of hours in a year.

これは私がやりたいことのおよそですが、カウントはリストであるため、n()/カウントは機能しません。

data_bin <- data_list %>%
  lapply(., group_by, temp_bin) %>%
  lapply(., summarise, n = n()/count)

n の定義内で lapply または mapply を実行しようとしましたが、うまくいかないようでした。生の n 値を作成し、次のステップで mapply を使用して除算しますが、それも機能しませんでした。

4

2 に答える 2

2

countあなたのステップにステップを入れれば、data_binそれはあなたが望むことを達成すると思いますが、私はあなたが何を意味するのか正確には少しぼやけていますが、これはうまくいくと思います: (.の最初の引数から割り当てを削除できることに注意してください。それlapplyがデフォルトですの挙動%>%)

data_bin <- data_list %>%
 lapply(group_by, temp_bin) %>%
 # We need x so I put summarize in a manual function
 lapply(function(x){summarize(x,n = 5*n()/nrow(x))}) # move the 5 to numerator

data_bin[[1]]
Source: local data frame [4 x 2]

  temp_bin         n
1        1 0.7142857
2        2 1.0714286
3        3 1.4285714
4        4 1.7857143

これはあなたが望んでいたものですか?結果を返すだけで、要約が部分的に実行されていることを再確認できますnrow(x)

data_bin <- data_list %>%
 lapply(group_by, temp_bin) %>%
 lapply(function(x){summarize(x,n = nrow(x))}) 

data_bin[[1]]
Source: local data frame [4 x 2]

temp_bin  n
1        1 14
2        2 14
3        3 14
4        4 14
于 2015-05-21T20:03:02.850 に答える
1

ステートメントlapplyのすべての行で使用することは避けようとします。dplyr個々のdata.frame変換を関数にラップしてから、lapplyその関数をdata_list

library(dplyr)

ret_db <- function(df) {
  db <- df %>%
    group_by(.,temp_bin) %>%
    summarise(.,n=n()/(nrow(df)/5))
  return(db)
}

data_bin <- lapply(data_list,ret_db)
于 2015-05-21T20:12:14.650 に答える