これはかなりシンプルで解決策はありますが、多くの列があるので時間がかかります。私は他の解決策を見てきましたが、いつも少し違っていました(1つの列を集約し、すべての列を変更するなど)。 SQLではselect PAT_ID, max(X), max(Y), max(Z) from table_name group by PAT_ID
を実行します。ロールアップレコード、各列の最大値、group_by R
私はこのようになりますデータセットを持っている(しかし、より多くの列を持つ):
dt <- data.frame(
PAT_ID = c('P','P','P','A','A','A'),
X = c(1,NA,NA, 1,NA,NA),
Y = c(NA,2,NA,NA,1,NA),
Z = c(NA,NA,1,NA,NA,0)
)
だから私は要約し、その後、結果を組み合わせる:
results_X <-dt %>%
group_by(PAT_ID) %>%
summarise(X = max(X, na.rm=TRUE))
results_Y <-dt %>%
group_by(PAT_ID) %>%
summarise(Y = max(Y, na.rm=TRUE))
results_Z <-dt %>%
group_by(PAT_ID) %>%
summarise(Z = max(Z, na.rm=TRUE))
resulted <- left_join(results_X, results_Y)
resulted <- left_join(resulted, results_Z)
私の出力が「ROLL-ですPAT_IDごとに各列の最大値である「最大」レコードがあります。
myresult <- data.frame(
PAT_ID = c('P','A'),
X = c(1,1),
Y = c(2,1),
Z = c(1,0)
)
これを行うには良い方法がありますが、しかしどのように?
summarise_each(funs(max(。、na.rm = TRUE)))...ありがとうございます!私は、summarise_eachが変数ごとにグループに適用されないことに気づいていませんでした。構文の小さな編集に気をつけてください。 – soporific
@soporific '?summarise_each'ヘルプページのメッセージに注意してください:mutate_all()およびsummarise_each()は、 、mutate_at()、mutate_if()、summarise_all()、summarise_at()、およびsummarise_if()のいずれかである。だからここで 'summarize_all()'を使ったのです。 – MrFlick
ありがとう!私はdplyrを再インストールし、それらのfnを得るためにセッションを再開しなければならなかった。新しい機能! :) – soporific