0

这就是我的数据的样子:

       1    2        3    
1  20.47039  xae 20.65273
2  21.94899  xei 22.06170
3  22.96345  p 23.06622
4  23.61655  xei 23.68949
5  24.50835  p 24.57134
6  25.92349  xa 26.01042
7  26.34687  no 26.44185
8  27.83433  xoe 27.93414

我现在想计算第 2 行中的时间 tmin 和第 1 行中的 tmax 之间的差异。我设法使用 for 循环来做到这一点:

for (i in 1:nrow(data)) {
  difference[i] = (VP3_erw[i+1,1]) - (VP3_erw[i, 3])
}

但是,每当在列p中写入时,我都想计算

difference[i] = (data[i+1,1]) - (data[i, 3]) - (data([p,3]) - datadata([p,1]))

p在这里代表p被索引的行

我试图解决charmatch

p= c("p")  
ind_p = (as.numeric(row.names(data)) & charmatch((substr(as.character(data[,2]),1,1)), p, nomatch = FALSE) > 0)  

而不是试图将其引入 if 循环:

if (ind_p == "FALSE") {
  for (i in 1:nrow(data)) {  
    difference[i] = (VP3_erw[i+1,1]) - (VP3_erw[i, 3])
  }
else {
  difference[i] = (data[i+1,1]) - (data[i, 3]) - (data([p,3]) - datadata([p,1]))
}
}

但我确实在索引到p写入的行和使用 if - 循环时遇到了问题。

非常感谢您的帮助。

4

1 回答 1

1

这可能是因为有几点我试图重用你的代码,但它是不可重现的。因此,假设您的数据集的名称是“数据”(我没有使用任何名为 VP3_erw 的东西):

data <- structure(list(`1` = c(20.47039, 21.94899, 22.96345, 23.61655, 
24.50835, 25.92349, 26.34687, 27.83433), `2` = structure(c(4L, 
5L, 2L, 5L, 2L, 3L, 1L, 6L), .Label = c("no", "p", "xa", "xae", 
"xei", "xoe"), class = "factor"), `3` = c(20.65273, 22.0617, 
23.06622, 23.68949, 24.57134, 26.01042, 26.44185, 27.93414)), .Names = c("1", 
"2", "3"), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5", "6", "7", "8"))

difference <- list()

for (i in 1:nrow(data)) {

   if (data[i,2] == "p") {
       difference[i] = data[i+1,1] - data[i, 3] - data[i,3] - data[i,1]
   }
   else {
       difference[i] = data[i+1,1] - data[i, 3]
   }

}
于 2013-07-23T13:37:46.637 回答