2016-11-24 33 views
0

我很好奇如何在R中創建另一個數據集,這將存儲因子變量的最大值並匹配該最大值的觀測值。存儲因子變量的最大值並匹配該最大值的觀測值

這裏是數據集中的只用4個受試者的片段和代碼:

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試驗。我需要根據力量爲給定科目在所有試驗中選擇最大值。所以我對Force列的最大值感興趣。所有其他與這個最大力量有關的觀察應該被保留,那些與最大力量不一致的觀察應該被忽略。

代碼結果很奇怪。只爲3個主題,忽略其餘。而不是最好的試用。但我認爲我在某個地方完全錯了。

你能指點我一個更好的解決方案嗎?

+0

請提供一個最小的,可重現的例子,它可以很容易地複製和粘貼到R會話中。 [這裏有一些提示](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)關於如何做到這一點。 –

+0

感謝羅馬,做過 –

回答

0

這是一個簡單的dplyr鏈,應該給你你想要的。按每個主題分組,僅過濾Force對於該主題最大的值。

library(dplyr) 

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

非常感謝,這個作品很棒!現在它應該調整爲NA,但它是另一回事:)) –

+0

這是一個簡單的調整,'max'具有'na.rm'參數。查看更新的代碼。 –