2017-03-10 90 views
0

希望這是有道理的: 我從csv文件的形式接收來自同事的數據,每個文件的長度可能是數千行。這些文件中有多列,但最初我感興趣的2個被命名爲「目標」和「溫度」。 「目標」有多個類別,每個目錄中可以有很多(或很少)「溫度」數據點。 例如:計數超出R的範圍數據

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

每個目標有它自己的定義的溫度範圍內,所以我需要限定這些範圍,然後計數的樣本數爲每個目標的一些方法是內或所定義的外範圍。

任何及所有建議感激地接受

+0

之外。你想要的輸出是什麼。請提出這個問題[reproducible](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – r2evans

+1

請參閱'?cut'或'?findInterval'來定義您的範圍值。 – thelatemail

回答

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