我有一个巨大的数据框,后面跟随着多个变量名。为简化起见,我创建了一个包含8个变量的示例,后5个变量遵循列名称中的顺序:I5min_thresh.118,I5min_thresh.118.5,I5min_thresh.119,I5min_thresh.119.5,I5min_thresh.120)。
变量名称中的序列只是一个示例,可以有所不同,例如,变量序列名称可以从60到180乘以0.1步(在此示例中从118到120乘以0.5步)。
可重现的数据帧:
df<-data.frame(Event=c("yes","yes","yes","no","no","no","no","no","no"),
mois=c(0.3,0.2,0.2,0.3,0.3,0.3,0.3,0.3,0.2),
I_float=c(96.0,100.8,96.0,21.6,10.8,10.8,16.8,8.4,16.8),
Imax.118=c(95.0,105.0,77.0,15.0,5.0,49.7,53.8,51.2,57.8),
Imax.118.5=c(97.0,90.0,100.0,16.0,15.0,50.2,54.3,51.7,58.3),
Imax.119=c(98.0,110.0,78.0,51.4,8.0,50.7,54.8,52.2,58.8),
Imax.119.5=c(99.8,71.0,80.0,51.9,51.2,51.2,55.3,52.7,59.3),
Imax.120=c(54.6,71.5,79.0,52.4,51.7,51.7,55.8,53.2,59.8))
数据框的外观如下:
我想为每个Imax计数以下变量,并将其存储在新的数据框中:
结果数据帧应如下所示,其中Yintercept等于Imax变量中包含的序列号:
现在,我仅设法为1个变量计算TP,FN,TN和FP,通过在r代码(Imax.118)中准确指出变量名称来说出变量Imax.118(上一示例的第一行)。我不能使用手动方法,因为在真实数据框中,按照名称顺序包含数百个变量。
任何帮助将不胜感激。
使用gather
我们可以把我们的数据长,只保留了数字和原来的点Imax
列,然后按我们的Yintercept
列和行总结其返还金额TRUE
为指定的条件TP
,FN
,TN
和FP
列。
library(tidyverse)
df %>%
gather(Yintercept, val, -Event, -mois, -I_float) %>%
mutate(Yintercept = as.numeric(gsub("Imax\\.", "", Yintercept))) %>%
group_by(Yintercept) %>%
summarise(TP = sum(I_float > val & Event == "yes"),
FN = sum(I_float < val & Event == "yes"),
TN = sum(I_float < val & Event == "no"),
FP = sum(I_float > val & Event == "no"))
Yintercept TP FN TN FP
<dbl> <int> <int> <int> <int>
1 118 2 1 4 2
2 118. 1 2 5 1
3 119 1 2 5 1
4 120. 2 1 6 0
5 120 3 0 6 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句