R 中的数据操作

Data manipulations in R

作为项目的一部分,我目前正在使用 R 来分析一些数据。我目前无法从我从 csv 文件导入的现有数据集中检索一些值。

文件看起来像:

为了我的分析,我想创建另一列,它是 x 当前值与其先前值的减法。但是每个唯一 ix 的第一个值将与当前值相同。我是 R 的新手,一段时间以来我一直在尝试各种方法,但仍然无法找到一种方法。征求您对我完成此任务可以遵循的方法的建议。

我的数据结构

structure(list(t = 1:10, x = c(34450L, 34469L, 34470L, 34483L, 
34488L, 34512L, 34530L, 34553L, 34575L, 34589L), y = c(268880.73342868, 
268902.322359863, 268938.194698248, 268553.521856105, 269175.38273083, 
268901.619719038, 268920.864512966, 269636.604121984, 270191.206593437, 
269295.344751692), i = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L)), .Names = c("t", "x", "y", "i"), row.names = c(NA, 10L), class = "data.frame")

您可以使用diff()功能。如果要向现有数据框添加新列,diff 函数将 return 当前数据框的向量 x-1 长度。所以在你的情况下你可以试试这个:

# if your data frame is called MyData 
MyData$newX = c(NA,diff(MyData$x))

那应该输入一个 NA 值作为新列中的第一个条目,其余值将是 "x" 列中顺序值之间的差值

更新:

您可以创建一个简单的循环,方法是对 "i" 的每个唯一实例进行子集化,然后计算您的 x 值之间的差异

# initialize a new dataframe
newdf = NULL
values = unique(MyData$i)
for(i in 1:length(values)){
  data1 = MyData[MyData$i = values[i],]
  data1$newX = c(NA,diff(data1$x))
  newdata = rbind(newdata,data1)
}

# and then if you want to overwrite newdf to your original dataframe
MyData = newdf

# remove some variables
rm(data1,newdf,values)

您可以使用data.table包获取您想要的:

library(data.table)
setDT(MyData)[, x_diff := c(x[1], diff(x)), by=i]
MyData
     # t     x i x_diff
 # 1:  1 34287 1  34287
 # 2:  2 34789 1    502
 # 3:  3 34409 1   -380
 # 4:  4 34883 1    474
 # 5:  5 34941 1     58
 # 6:  6 34045 2  34045
 # 7:  7 34528 2    483
 # 8:  8 34893 2    365
 # 9:  9 34551 2   -342
# 10: 10 34457 2    -94

数据:

set.seed(123)
MyData <- data.frame(t=1:10, x=sample(34000:35000, 10, replace=T), i=rep(1:2, e=5))