Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从特定时间范围内的最高先验值中减去一个值,单位为r_R - Fatal编程技术网

从特定时间范围内的最高先验值中减去一个值,单位为r

从特定时间范围内的最高先验值中减去一个值,单位为r,r,R,我试图创建一个差异变量,通过从三年前每个id的最高值中减去列中的每个值 我的数据如下所示: data <- data.frame(id = c(1,1,1,1,2,2,3,3,3,3,4,4,4), testocc = c(1,2,3,4,1,2,1,2,3,4,1,2,3), score = c(0.8,0.3,0.1,0.2,0.1,0.5,0.9,0.5,0.7,0.6,0.3,0.2,0.6),

我试图创建一个差异变量,通过从三年前每个id的最高值中减去列中的每个值

我的数据如下所示:

data <- data.frame(id = c(1,1,1,1,2,2,3,3,3,3,4,4,4),
                  testocc = c(1,2,3,4,1,2,1,2,3,4,1,2,3),
                  score = c(0.8,0.3,0.1,0.2,0.1,0.5,0.9,0.5,0.7,0.6,0.3,0.2,0.6),
                  time = c(0,1,1,3,0,4,0,4,2,1,0,3,2))
> data                            Score.Maximum
id   testocc   score   time    Within.3.Years.Prior    Difference (= Score - Score Maximum within 3 Years Prior)
1      1        0.8     0             -                    0
1      2        0.3     1             0.8                 -0.5
1      3        0.1     1             0.8                 -0.7
1      4        0.2     3             0.1                  0.1
2      1        0.1     0             -                    0
2      2        0.5     4             0.1 (or NA)          0.4 (or NA)   
3      1        0.9     0             -                    0
3      2        0.5     4             0.9 (or NA)         -0.4 (or NA)
3      3        0.7     2             0.5                  0.2
3      4        0.6     1             0.7                 -0.1
4      1        0.3     0             -                    0
4      2        0.2     3             0.3                 -0.1
4      3        0.6     2             0.2                  0.4
这里的时间(以年为单位)是自上一次测试以来的时间,我想找出过去三年中单个测试的最高分数。然后我想从最高的分数中减去当前的分数。每个单独的id都单独处理

我也希望有两种版本:

  • 如果唯一的先验值大于3年前,我仍然希望从中减去当前值(如上面的所需输出所示)
  • 如果唯一的previor值是>3 ago,我想输入一个NA(如上面括号中所示)
    我想我必须计算所有测试之间的成对时间,在3年内做一个截止值,然后从其中的最大值中减去,我只是不知道该怎么做

    这里有一种使用
    dplyr
    解决版本2的方法。首先按
    id
    分组,并根据时间步长计算运行时间。然后可以使用
    do
    语法计算最大值。最后,确定初始时间并计算差值

    require(dplyr)
    data %>% 
      group_by(id) %>%
      mutate(cumtime = cumsum(time)) %>%
      do({
        mutate(., 
               max = sapply(.$cumtime, function(t){
                 max(.$score[.$cumtime < t & t - .$cumtime <= 3])
               }))
      }) %>%
      mutate(max = ifelse(cumtime == 0, score, max), 
             max = ifelse(!is.finite(max), NA, max),
             difference = score - max) 
    
    require(dplyr)
    数据%>%
    分组依据(id)%>%
    突变(累积时间=累积和(时间))%>%
    做({
    突变(。,
    max=sapply(.$cumtime,函数(t){
    最大(.$score[.$cumtime
    到目前为止您尝试了什么?我想不起来。我知道如何使用数据%>%group\u by(id)%%>%mutate(…)减去以前的值或减去最大值我只是不知道如何减去之前的最大值,同时应用时间截止值。我不理解您想要的输出。它似乎与您的数据或您想要的行为不符。您能澄清一下吗。下面是我认为您描述的问题的可能解决方案:
    data%>%group_by(id)%%>%do({mutate(,,max=sapply(.$time,function(t){max(.$score[.$time%mutate(difference=max-score)
    让我描述一下id#1的输出,让它更清楚:0.8-0.8=0(每个个体的第一个值将=零,自身的减法)0.3-0.8=-0.5(0.8在0.3之前,最高,并且在3年内)0.1-0.8=-0.7(0.8高于0.3,且仍在3年内)0.2-0.1=0.1(0.1是3年内从0.2减去的唯一值)每个分数减去测试3年内的先前最佳分数,产生差异变量“0.2-0.1=0.1(0.1是从0.2减去3年内的唯一值)”,为什么第二行的值(.3)不在三年内?它具有相同的
    $time