R中行或列操作的比较

时间:2015-03-18 20:48:17

标签: r dataframe

我想在数据帧的列上执行操作,其中输出取决于两个值之间的比较。

我的数据框dat的排列方式如下:

region  value1
a       0
a       0
a       6
a       7
a       3
a       0
a       4
b       5
b       1
b       0

我想创建一个基于整数的因子值向量。每当区域值发生变化或每次value1为0时,因子值都应递增。因此,在这种情况下,我想要的向量将等同于c(1, 2, 2, 2, 2, 3, 3, 4, 4, 5)

我有代码可以使因子向量仅在value1为0时递增:

fac <- as.factor(cumsum(dat[,2]==0))

我有c风格的代码,它大致我想要的矢量,但在我的整体数据上运行速度非常慢,简直太丑了:

p <- 1
facint <- 1
for (i in 2:length(dat[,2])) {
  facint <- c(facint, p)
  if (dat[i, 2]==0 || dat[i, 1] != dat[i-1, 1])
    p = p+1
  }

fac <- as.factor(facint)

那么在R风格编程的每一行上操作时如何完成这样的操作呢?

1 个答案:

答案 0 :(得分:1)

尝试

cumsum(dat[,2]==0|c(FALSE,dat$region[-1]!=dat$region[-nrow(dat)]))
# [1] 1 2 2 2 2 3 3 4 4 5

或者

cumsum(!duplicated(dat[,1]) | dat[,2]==0)
#[1] 1 2 2 2 2 3 3 4 4 5