私が欲しいものは次のように記述することができます:データフレームを与え、すべてのケースコントロールペアが含まれています。次の例では、yはケースコントロールペアのIDです。私のデータセットには3組あります。私は、yの異なる値に関してリサンプリングを行っています(ペアはどちらも選択されているか、どちらも選択されていません)。今重複した値を持つベクトルに基づいて、データフレームの行を選択してください。
sample_df = data.frame(x=1:6, y=c(1,1,2,2,3,3))
> sample_df
x y
1 1 1
2 2 1
3 3 2
4 4 2
5 5 3
6 6 3
select_y = c(1,3,3)
select_y
> select_y
[1] 1 3 3
、私は、ベクターは、私が上記select_y
である、リサンプリングするペアが含まれて計算されています。これは、症例対照ペア番号1が私の新しいサンプルにあり、番号3も新しいサンプルにあることを意味するが、2つで3回あるので、2回発生する。
私は...
ソリューションforループを書くよりも、他の効率的な方法を見つけることができません。 @HubertLをもとに、いくつかの修正を加えて、「ベクトル化」アプローチは次のようになります。
sel_y <- as.data.frame(table(select_y))
> sel_y
select_y Freq
1 1 1
2 3 2
sub_sample_df = sample_df[sample_df$y%in%select_y,]
> sub_sample_df
x y
1 1 1
2 2 1
5 5 3
6 6 3
match_freq = sel_y[match(sub_sample_df$y, sel_y$select_y),]
> match_freq
select_y Freq
1 1 1
1.1 1 1
2 3 2
2.1 3 2
sub_sample_df$Freq = match_freq$Freq
rownames(sub_sample_df) = NULL
sub_sample_df
> sub_sample_df
x y Freq
1 1 1 1
2 2 1 1
3 5 3 2
4 6 3 2
selected_rows = rep(1:nrow(sub_sample_df), sub_sample_df$Freq)
> selected_rows
[1] 1 2 3 3 4 4
sub_sample_df[selected_rows,]
x y Freq
1 1 1 1
2 2 1 1
3 5 3 2
3.1 5 3 2
4 6 3 2
4.1 6 3 2
私はそれがよりよい解決策だと言わざるを得ません。それはスプリットの良い使用です。 –