複数の言語タグがあるため、どの言語を使用するのかは疑問ではありません。一般的な質問では、焦点を合わせる必要があり、1つの言語でのみ対処する必要があります。これは、なぜ多くの人々が質問を落としたのだろうか。いずれにしても
、場合にあなたがここにRで答えを望んでいたが、いくつかの選択肢です:
1)は年/月カラム("time"
)を追加し、幅広いmean
を使用して長いから作り直すreshape2:
library(reshape2)
df2 <- transform(df, time = substr(changed_time, 1, 7))
dcast(df2, owner + priority + goal ~ time, mean, value.var = "delta_time", fill = NA_real_)
寄付:
owner priority goal 2016-09 2016-10 2016-11
1 alice P1 20 NA 70.0 NA
2 alice P3 40 34 NA NA
3 bob P1 40 20 14.5 20
4 bob P2 20 NA NA 10
5 bob P3 30 NA NA 70
6 ross P2 40 10 NA NA
7 sec P2 40 34 NA NA
2)dplyr/tidyr月/年"time"
列を追加し、平均delta_timeをowner
,priority
,goal
およびtime
で計算します。最後に長いものから広いものに変換して並べ替えます。
library(dplyr)
library(tidyr)
df %>%
mutate(time = substr(changed_time, 1, 7)) %>%
group_by(owner, priority, goal, time) %>%
summarize(delta_time = mean(delta_time)) %>%
ungroup() %>%
spread(time, delta_time) %>%
arrange(owner, priority)
与えない:
# A tibble: 7 x 6
owner priority goal 2016-09 2016-10 2016-11
<fctr> <fctr> <int> <dbl> <dbl> <dbl>
1 alice P1 20 NA 70.0 NA
2 alice P3 40 34 NA NA
3 bob P1 40 20 14.5 20
4 bob P2 20 NA NA 10
5 bob P3 30 NA NA 70
6 ross P2 40 10 NA NA
7 sec P2 40 34 NA NA
3)何のパッケージを年/月カラム("time"
)を追加し、aggregate
を使っ手段計算して、広いreshape
とソートを使用して長いから変換:
df2 <- transform(df, time = substr(changed_time, 1, 7))
ag <- aggregate(delta_time ~ owner + priority + goal + time, df2, mean)
nms <- unique(as.character(sort(ag$time)))
r <- reshape(ag, dir = "wide", idvar = c("owner", "priority", "goal"), varying = list(nms))
o <- order(r$owner, r$priority)
r[o, ]
与える:
owner priority goal 2016-09 2016-10 2016-11
5 alice P1 20 NA 70.0 NA
4 alice P3 40 34 NA NA
1 bob P1 40 20 14.5 20
7 bob P2 20 NA NA 10
8 bob P3 30 NA NA 70
2 ross P2 40 10 NA NA
3 sec P2 40 34 NA NA
注:入力データフレームdf
再現可能な形では、次のとおり
Lines <- "id priority owner goal changed_time delta_time
1 P1 bob 40 2016-11-02 20
2 P2 bob 20 2016-11-02 10
3 P3 bob 30 2016-11-02 50
4 P1 alice 20 2016-10-02 70
5 P1 bob 40 2016-10-02 05
6 P1 bob 40 2016-10-02 24
7 P3 alice 40 2016-09-02 34
8 P1 bob 40 2016-09-02 20
9 P2 ross 40 2016-09-02 10
10 P1 bob 40 2016-11-02 20
11 P2 sec 40 2016-09-02 34
12 P3 bob 30 2016-11-02 90"
df <- read.table(text = Lines, header = TRUE)
パーフェクト! ..たくさんありがとう@Julien – sabya