我有一个R DataFrame df,其内容如下:
Serial N year current
B 10 14
B 10 16
B 11 10
B 11 NA
B 11 15
C 12 11
C 12 9
C 12 13
C 12 17
. . .我想找出同一序列N的每一对连续电流之间的区别。这是代码i wrote.But,我得到了一些奇怪的结果。
library(data.table)
setDT(df)[,mydiff:=diff(df$current),by=Serial N]
print(length(df$current))我得到了下面的输出,因为这个专栏很奇怪,我得到了以下内容:
2 6 NA NA NA 2 6 NA NA NA 实际上,我想要的是:
Serial N year current mydiff
B 10 14
B 10 16 16-14=2
B 11 10 10-16=-4
B 11 NA NA
B 11 15 15-10=5
C 12 11
C 12 9 9-11=-2
C 12 -13 -13-9=-22
C 12 17 17-(-13)=30
. . .那样做是正确的吗?如果不是,如何解决这个问题(特别是不使用循环)?
发布于 2016-03-31 19:00:00
这可能对你有用。您可以从动物园包中为na.locf带来值。如果当前不为NA,则ifelse条件仅填充my.diff。
library(data.table)
library(zoo)
df <- read.table(textConnection("
'Serial N' year current
B 10 14
B 10 16
B 11 10
B 11 NA
B 11 15
C 12 11
C 12 9
C 12 -13
C 12 17"),header=TRUE)
setDT(df)
setkey(df,Serial.N)
df[,my.diff := ifelse(!is.na(current), c(" ",diff(na.locf(current))), NA),by=Serial.N]
# Serial.N year current my.diff
# 1: B 10 14
# 2: B 10 16 2
# 3: B 11 10 -6
# 4: B 11 NA NA
# 5: B 11 15 5
# 6: C 12 11
# 7: C 12 9 -2
# 8: C 12 -13 -22
# 9: C 12 17 30https://stackoverflow.com/questions/36338555
复制相似问题