计算R中的范围数据

时间:2017-03-10 03:08:59

标签: r count

希望这是有道理的: 我正在以csv文件的形式从同事那里接收数据,每个文件都可以长达数千行。这些文件中有多个列,但最初我感兴趣的2个名称为“target”和“temperature”。 “目标”有多个类别,在每个类别中,“温度”可以有许多(或很少)数据点。 例如:

target       temperature
RSV          87.2
RSV          86.9
......
HSV          84.3
HSV          89.7

每个目标都有自己定义的温度范围,因此我需要一些方法来定义这些范围,然后计算每个目标的样本数量在定义范围之内或之外。

感激地收到任何和所有建议

1 个答案:

答案 0 :(得分:1)

脚本计算范围,然后计算每个目标的样本数量在定义的范围之内或之外

# data from colleagues
df <- data.frame(target=c("RSV", "RSV", "RSV", "RSV",
                          "HSV", "HSV", "HSV",
                          "SRV", "SRV", "SRV"),
                 temperature=c(87.2, 86.9, 86.8, 86.7,
                               84.3, 89.7, 88.7,
                               54.3, 59.7, 58.7))

# target with ranges
res <- data.frame(target=character(0),
                  min.temperature=numeric(0),
                  max.temperature=numeric(0),
                  within=numeric(0),
                  outside=numeric(0))

# targets
l <- levels(df$target)

for(i in 1:length(l)) {
  t <- df[df$target==l[i],]$temperature

  # some way of defining these ranges
  t.min <- min(t)
  t.max <- max(t)

  # targets in [min; max]
  in.range <- df$temperature >= t.min &
    df$temperature <= t.max

  t.within <- nrow(df[df$target==l[i] & in.range,])
  t.outside <- nrow(df[df$target==l[i] & !in.range,])

  res <- rbind(res, data.frame(target=l[i],
                     min.temperature=t.min,
                     max.temperature=t.max,
                     within=t.within,
                     outside=t.outside))
}

print(res)
#   target min.temperature max.temperature within outside
# 1    HSV            84.3            89.7      3       0
# 2    RSV            86.7            87.2      4       0
# 3    SRV            54.3            59.7      3       0