R中的数据处理

时间:2015-11-18 12:58:49

标签: r dataset data-analysis

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

该文件如下:

enter image description here

对于我的分析,我想创建另一个列,即减去x的当前值及其先前的值。但是,每个唯一ix的第一个值与当前值相同。我是R的新手,我现在正尝试各种方式,但仍然无法找到一种方法。以我可以遵循的方法请求您的建议以实现此任务。

Mydata结构

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")

2 个答案:

答案 0 :(得分:2)

您可以使用包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))

答案 1 :(得分:0)

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

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

这应该输入一个NA值作为新列中的第一个条目,剩下的值将是&#34; x&#34;中的连续值之间的差值。柱

更新:

您可以通过对&#34; i&#34;的每个唯一实例进行子集化来创建一个简单的循环。然后计算你的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)