2016-05-17 5 views
1

ds $ date_fixedとds $ date_brokenの間の平均燃焼時間(burningshours $ hours_burned)を計算したいと思います。rの場所ごとに(別のデータセットから)期間の平均を計算する

ds$average_burninghours <- sapply (interval(ds$date_fixed, ds$date_broken), function(i)         
          mean (burning_hours$hours_burned[burning_hours$date%within%i])) 

しかし、私は場所と位置によってburn_hoursを計算したいと思います。 それで、lkeのようなコードを追加したいと思います: 'group_by = c(location、position)'ですが、それをすることはできません。誰かがそれについてのアイデアを持っていますか?

サンプルコード:

ds <- data.frame(date_fixed= c("16-3-2015", "19-3-2015", "21-3-2015"), 
        date_broken = c("18-3-2015", "22-3-2015", "24-3-2015"), 
        location = c("A", "B", "B"), position = c("1", "2", "2")) 

burning_hours <- data.frame(date = c("16-3-2015", "16-3-2015", "17-3-2015", "17-3-2015", 
          "18-3-2015", "18-3-2015", "19-3-2015", "19-3-2015", "20-3-2015", 
          "20-3-2015", "21-3-2015", "21-3-2015", "22-3-2015", "22-3-2015", 
          "23-3-2015", "23-3-2015", "24-3-2015", "24-3-2015"), 
          hours_burned= c("10", "11"), location = c("A", "B"), 
          position = c("1", "2")) 

所望の結果:

 date_fixed date_broken location position avg_burninghours 
    16-3-2015 18-3-2015 A   1   10 
    19-3-2015 22-3-2015 B   2   11 
    21-3-2015 24-3-2015 B   2   11 

答えて

0

2つのデータフレームをマージした後、サブセット。

library(dplyr) 
library(lubridate) 

#Cleaning 
ds$date_fixed <- dmy(ds$date_fixed) 
ds$date_broken <- dmy(ds$date_broken) 
burning_hours$date <- dmy(burning_hours$date) 
burning_hours$hours_burned <- as.numeric(as.character(burning_hours$hours_burned)) 

df <- merge(burning_hours,ds,by = c('location','position')) 

df %>% 
    group_by(date_fixed,date_broken,location,position) %>% 
    filter(date >= date_fixed,date <= date_broken) %>% 
    summarise(avg_burninghours = mean(hours_burned)) 

います:

date_fixed date_broken location position avg_burninghours 
     (date)  (date) (fctr) (fctr)   (dbl) 
1 2015-03-16 2015-03-18  A  1    10 
2 2015-03-19 2015-03-22  B  2    11 
3 2015-03-21 2015-03-24  B  2    11 
+0

を私が持っているデータセット全体にこのコードを実行すると、私は唯一の「avg_burninghours」の一つの結果を取得します。 dfの新しい列は作成しません。これはどこから来たのか分かりますか? – Mini

+0

マージとサブセットの前にクリーニングコードを実行しましたか?マージとサブセット操作を実行する直前の時点でデータセットの 'str'を共有できますか?データの不適切なデータ型によって、ユーザーが操作できなくなる可能性があります。 – shreyasgm

関連する問題