data.frame
またはdata.table
2 つの条件で列を作成しようとしています。私が見た投稿と以下で変更しようとした投稿との違いは、条件の「値」を持っていないが、条件が の他の変数に依存することdata.frame
です。
これが私のデータフレームであるとしましょう:
mydf <- data.frame (Year = c(2000, 2001, 2002, 2004, 2005,
2007, 2000, 2001, 2002, 2003,
2003, 2004, 2005, 2006, 2006, 2007),
Name = c("Tom", "Tom", "Tom", "Fred", "Gill",
"Fred", "Gill", "Gill", "Tom", "Tom",
"Fred", "Fred", "Gill", "Fred", "Gill", "Gill"))
3 人の被験者が過去 5 年間に何回イベントを経験したかを知りたいです。ただし、イベントの日付が 5 年以上前にさかのぼる場合は、含めたくありません。Year < Year & Year >= Year-5
. _ したがって、基本的には、焦点年よりも小さく、焦点年より 5 年以上前の年の経験を合計します。
合計の指標と焦点年の変数を作成しました - 5
mydf$Ind <- 1
mydf$Yearm5 <- mydf$Year-5
次に、速度のためにデータ テーブルに変換します (元の df には +60k obs があります)。
library(data.table)
mydf <- data.table(mydf)
今の問題は、2 つの条件を機能させることができないということです。私が見た投稿はすべて、サブセット化する特定の値を知っているようです (たとえば、複数の条件での R data.table subsetting. )、しかし私の場合、値は観測ごとに変化します (これが私がする必要があることを意味するかどうかはわかりません)いくつかのループ?)。
次のようなものが必要だと思いました:
mydf[, c("Exp"):= sum(Ind), by = c("Name")][Year < Year & Year >= Yearm5]
与えます:
Empty data.table (0 rows) of 5 cols: Year,Name,Ind,Yearm5,Exp
条件を 1 つだけ使用する
mydf1 <- mydf[, c("Exp"):= sum(Ind), by = c("Name")][Year >= Yearm5]
全体的な経験を与えるので、状態に何か問題があると想定していYear < Year
ます。
よくわかりませんが。また、提案を変更しようとしました: R の 1 つのベクトルに値を累積的に追加する 方法は、条件を指定する方法に問題があるようです。
library(dplyr)
mytest1 <- mydf %>%
group_by(Name, Year) %>%
filter(Year < Year & Year >= Yearm5) %>%
mutate(Exp = sum(Ind))
結果は次のようになります。
myresult <- data.frame (Year = c(2003, 2004, 2004, 2006,
2007, 2000, 2001, 2005,
2005, 2006, 2007, 2000,
2001, 2002, 2002, 2003),
Name = c("Fred", "Fred", "Fred", "Fred",
"Fred", "Gill", "Gill", "Gill",
"Gill", "Gill", "Gill", "Tom",
"Tom", "Tom", "Tom", "Tom"),
Ind = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
Exp = c(0, 1, 1, 3, 4, 0, 1, 1, 1, 2, 3, 0, 1, 2, 2, 4),
Yearm5 = c(1998, 1999, 1999, 2001, 2002,
1995, 1996, 2000, 2000, 2001,
2002, 1995, 1996, 1996, 1997, 1998))
ヘルプやポインタをいただければ幸いです。