2016-11-24 4 views
0

ファクタ変数の最大値を保存し、その最大値の一致する観測値を格納する別のデータセットをRに作成する方法が不思議です。ファクタ変数の最大値とその最大値の一致する観測値

library(data.table) my.data <- structure(list(Subject = c(1L, 1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), Supervisor = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Emmi", "Pauli"), class = "factor"), Time = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 2L, 3L, 3L, 3L), .Label = c("01.02.2016 09:45", "01.02.2016 09:48", "01.03.2016 09:55"), class = "factor"), Trials = c(1L, 2L, 3L, 4L, 1L, 2L, 1L, 2L, 3L, 1L, 2L, 3L, 4L), Force = c(403.8, 464.6, 567.6, 572.9, 572.4, NA, 533.1, 547, 532.6, 503.8,464.6, 367.6, 372.9), ForceProduction = c(1073, 1149.6, 1944.7, 1906.4, 2260.9, NA, 2634.5, 2471.6, 1187.9, 1073, 1149.6,1944.7, 1906.4)), .Names = c("Subject", "Supervisor", "Time", "Trials", "Force", "ForceProduction"), class = "data.frame", row.names = c(NA, -13L))

DT=as.data.table(my.data) new.data <- DT[,.SD[which.max(Force)],by=Trials]

各被験者2-4試験をした:ここ

はわずか4科目とコードとデータセットの断片です。フォースに基づいて、特定の被験者の全試行の中から最大の値を選択する必要があります。だから私はForceカラムの最大値に興味があります。この最大の力に関連する他の全ての観察は保存されるべきであり、最大の力に沿っていないものは消されるべきである。

コード結果が奇妙です。ちょうど3人の被験者のために、残りを無視してください。そして最善の裁判ではない。しかし、私はどこかでまったく間違っていると思う。

もっと良い解決策を教えてください。

+0

Rセッションに簡単にコピー&ペーストできる最小限で再現可能な例をご提供ください。 [ここにいくつかのヒントがあります](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)これを行う方法については、 –

+0

ありがとうRoman、done –

答えて

0

ここでは簡単にdplyrチェーンがあります。各主題別にグループ分けするには、その主題に対してForceが最大である値だけをフィルタリングします。

library(dplyr) 

my.data %>% 
    group_by(Subject) %>% 
    filter(Force == max(Force, na.rm = TRUE)) 
+0

ありがとう、これは素晴らしいです!今度はNAに対して調整する必要がありますが、それは別の話です:)) –

+0

これは簡単な調整です。 'max'には' na.rm'引数があります。更新されたコードをご覧ください。 –