Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.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 如何从以前的观察ID中减去值?_R_Dataframe - Fatal编程技术网

R 如何从以前的观察ID中减去值?

R 如何从以前的观察ID中减去值?,r,dataframe,R,Dataframe,我使用的是一个奇怪的数据框架,在这个数据框架中,观测值是无序的,并且每个观测值的唯一标识符不是以线性、直接的方式编号的。数据集中提供了唯一标识符ObservationID,用于唯一标识观察结果,以及PreviousObsId,用于标识之前的观察结果。我想从任何给定观测值中减去先前观测值。如果数据集出现故障,我该怎么做 所以我想要这个: ObservationID PreviousObsID Value 256A 866D

我使用的是一个奇怪的数据框架,在这个数据框架中,观测值是无序的,并且每个观测值的唯一标识符不是以线性、直接的方式编号的。数据集中提供了唯一标识符
ObservationID
,用于唯一标识观察结果,以及
PreviousObsId
,用于标识之前的观察结果。我想从任何给定观测值中减去先前观测值。如果数据集出现故障,我该怎么做

所以我想要这个:

ObservationID      PreviousObsID       Value 
256A                  866D              200
611A                  8166Q             415
866D                  611A              175
8166Q                  -                450                 
为此:

ObservationID      PreviousObsID       Value      ValueLessPrevious
256A                  866D              200            25
611A                  8166Q             415           -35
866D                  611A              175           -240
8166Q                 -                 450           
我希望这是有道理的——提前谢谢

数据:


一种方法是创建查找(以命名向量的形式)

mydat 3866D 611A 175-240
#>48166Q-450 NA

一种方法是创建查找(以命名向量的形式)

mydat 3866D 611A 175-240
#>48166Q-450 NA

另一个选项是
match

df1$ValueLessPrevious <- with(df1, Value - 
          Value[match(PreviousObsID, ObservationID)])
df1$ValueLessPrevious
#[1]   25  -35 -240   NA

df1$ValueLessPrevious另一个选项是
match

df1$ValueLessPrevious <- with(df1, Value - 
          Value[match(PreviousObsID, ObservationID)])
df1$ValueLessPrevious
#[1]   25  -35 -240   NA

df1$values之前,通过从先前观测值中减去观测值(先前观测值由先前观测值标识,而不是由观测值的顺序标识)来获得这些值。例如,对于第一次观察(256A),其先前的观察是866D。200(256A的值)-175(866D的值)=25通过从上一个观察值中减去一个观察值(上一个观察值由上一个观察值标识,而不是由观察值的顺序标识)得到这些值。例如,对于第一次观察(256A),其先前的观察是866D。200(256A的值)-175(866D的值)=25Hmm…当我在我的完整数据帧上运行此程序时,每次观察都会得到
NA
。我现在意识到,一些观测值有一个“PreviousObsId”,它在数据集中不作为“ObservationID”出现。换句话说,前面提到的观察结果根本不在数据集中。这可能是搞砸查找的原因吗?我对查找不太熟悉,因此为我的无知道歉。另外,Akrun的解决方案有效,因此无需更改您的解决方案。我只是想知道我所描述的是否是阻止代码工作的原因me@rogues77不确定-应该给出相同的结果。嗯……当我在完整的数据帧上运行这个时,每次观察都会得到
NA
。我现在意识到,一些观测值有一个“PreviousObsId”,它在数据集中不作为“ObservationID”出现。换句话说,前面提到的观察结果根本不在数据集中。这可能是搞砸查找的原因吗?我对查找不太熟悉,因此为我的无知道歉。另外,Akrun的解决方案有效,因此无需更改您的解决方案。我只是想知道我所描述的是否是阻止代码工作的原因me@rogues77不确定-应给出相同的结果。