【问题标题】:R: detect changing characters without loopR:检测没有循环的字符变化
【发布时间】:2014-07-09 10:05:10
【问题描述】:

我正在分析一个约 700000 行的庞大数据集。

我想在不使用循环的情况下检测字符从前一个字符发生变化的位置(在哪些行中)。

例如,在数组“dat”中,理想的函数会给出c(4,6)

dat=c(BIS84003, BIS84003, BIS84003, BIS84005, BIS84005, BIS84006)

有人知道吗?

【问题讨论】:

  • 为了将来参考,datvector,而不是 array,因为您没有第二个维度。您所说的“行”是 elementsvector 。 “行”一词用于指代矩阵或数组中的[j,] 元素集合。

标签: r loops character


【解决方案1】:

这里有两种方法:

  1. 使用游程编码
  2. 直接比较向量

方法一:通过函数rle()使用游程编码。

dat=c("BIS84003", "BIS84003", "BIS84003", "BIS84005", "BIS84005", "BIS84006")
head(cumsum(rle(dat)$lengths) + 1, -1)
[1] 4 6

方法二:比较向量

1 + which(dat[-1] != dat[-length(dat)])
[1] 4 6

【讨论】:

    【解决方案2】:

    使用diff

     which(!!c(0,diff(as.numeric(factor(dat)))))
     #[1] 4 6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-02
      • 2021-09-22
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2021-06-11
      • 2015-08-04
      • 1970-01-01
      相关资源
      最近更新 更多