存储因子变量的最大值并匹配该最大值的观察值

时间:2016-11-24 19:39:53

标签: r dplyr

我很好奇如何在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选择给定主题的所有试验中的最大值。所以我对Force列的最大值感兴趣。应该保留与这个最大力相关的所有其他观察,应该忽略那些与最大力不相符的观察。

代码结果很奇怪。只为3个科目,忽略其余的。而不是最好的审判。但我认为我在某处完全错了。

您能指导我找一个更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

这是一个简单的dplyr链,可以为您提供所需的内容。按每个主题分组,仅过滤Force为该主题的最大值。

library(dplyr)

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