2017-12-12 13 views
0

私は臨床試験の仕事をしています。私はLabDataというデータフレームを持っています。各被験者について、8回の実験室試験が実施されていたはずである。私はテスト名のベクトルを持っています。私は、各科目について、どのテストが欠けているかを教えてくれる新しいデータフレームを出力しようとしています。私はいくつかのdplyrとブラケット表記法を使用しましたが、これまでの主題を反復する方法と、すべてをクリーンなデータフレームに出力することの最も難しい部分については困惑しました。ここでテスト名のベクトルを使用して、各被験者に欠けているラボテストを確認してください。

は単に被験者が不足しているテストを持っているものを私に言って、

Tests <- data.frame(Tests=c("T1","T2","T3","T4","T5","T6","T7","T8")) 

LabData= read.table(text=" Subject Tests 
SubjectA T1 
SubjectA T2 
SubjectA T3 
SubjectA T4 
SubjectA T6 
SubjectA T7 
SubjectA T8 
SubjectB T2 
SubjectB T3 
SubjectB T4 
SubjectB T5 
SubjectB T6 
SubjectB T7 
SubjectC T1 
SubjectC T2 
SubjectC T3 
SubjectC T4 
SubjectC T5 
SubjectC T6 
SubjectC T7 
SubjectC T8 
", header=TRUE) 

私の理想的な出力はつぎのようになり、サンプルデータのためのコードです。私はそれが最善の方法だろう考え出しとして

Missing <- data.frame(Tests$Tests[!Tests$Tests %in% LabData$Tests]) 

もtapplyを使用してみました:それは、私はこれらのようなものを試してみましたが、それらのすべて

Subject TestMiss 

SubjectA T5 
SubjectB T1 
SubjectB T8 

を反復処理する必要がありますので、ここでも私は100 +科目を持っています各サブジェクトをループしますが、現在のデータがフォーマットされる方法では成功しません。どんな解決策も大変ありがとうございます。

+0

"long"から "wide"形式に変換すると、そこに途中まで来ることができます: 'require(data.table); dcast(LabData、件名〜テスト) 'データが欠けている場所を見つけることができます。 'wide_LabData [、。(missing_trial = which(is.na(.SD)))、by = 'Subject']' – Jealie

答えて

1

すべての組み合わせを提供するのにexpand.gridを使用し、結果を列に含めます。その後

library(dplyr) 

df <- expand.grid(
    Subject = unique(LabData$Subject), 
    Tests = unique(LabData$Tests), 
    stringsAsFactors = FALSE 
) %>% 
    as_tibble %>% 
    arrange(Subject, Tests) %>% 
    mutate(
    TestMiss = !paste0(Subject, Tests) %in% paste0(LabData$Subject, LabData$Tests) 
) 

df 

# # A tibble: 24 x 3 
#  Subject Tests TestMiss 
#  <chr> <chr> <lgl> 
# 1 SubjectA T1 FALSE 
# 2 SubjectA T2 FALSE 
# 3 SubjectA T3 FALSE 
# 4 SubjectA T4 FALSE 
# 5 SubjectA T5  TRUE 
# 6 SubjectA T6 FALSE 
# 7 SubjectA T7 FALSE 
# 8 SubjectA T8 FALSE 
# 9 SubjectB T1  TRUE 
# 10 SubjectB T2 FALSE 
# # ... with 14 more rows 

だけfilterどこTestMiss == TRUEあなたの最終的なリストを取得します。

df %>% filter(TestMiss == TRUE) 

# # A tibble: 3 x 3 
# Subject Tests TestMiss 
#  <chr> <chr> <lgl> 
# 1 SubjectA T5  TRUE 
# 2 SubjectB T1  TRUE 
# 3 SubjectB T8  TRUE 
関連する問題