在R中提取连续出现(如unix uniq)

时间:2012-06-16 18:39:52

标签: r

我开始分析论文的数据。我首先需要将连续出现的字符串计为一个。这是一个示例向量:

test <- c("vv","vv","vv","bb","bb","bb","","cc","cc","vv","vv")

我想简单地提取唯一值,如unix命令uniq。所以预期的输出将是一个向量:

“VV”, “BB”, “CC”, “VV”

我看了rle函数,看起来很好,但是如何将rle的输出作为向量?我似乎不理解rle类......

> rle(test)
Run Length Encoding
  lengths: int [1:5] 3 3 1 2 2
  values : chr [1:5] "vv" "bb" "" "cc" "vv"

如何获得rle输出的值的一个向量,另一个为长度?希望我能让自己明白......

再次感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

rle()返回类"rle"的两元素列表;正如@gsk指出的那样,你可以使用普通的列表索引结构来访问组件向量。

另外,试试这个,将rle的结果放入更熟悉的格式:

as.data.frame(rev(unclass(rle(test))))
#   values lengths
# 1     vv       3
# 2     bb       3
# 3              1
# 4     cc       2
# 5     vv       2

答案 1 :(得分:2)

来源:http://www.sigmafield.org/2009/09/22/r-function-of-the-day-rle

解决方案:rle(test)$values

他们使用:coin.rle <- rle(coin)coin.rle$values因此,rle(test)$values应该有用。