消除连续值

时间:2018-09-12 13:00:41

标签: r

user-> status of user.
alexa -> Enter user id.
user -> 123456
alexa -> status of user Active.

我有一个价格栏。我只需要消除连续的repititve值的新列。请提出建议。在第一行中,由于27.82是连续重复的,因此应将其设置为1,而输出应为27.82 / 23.65 / 27.82

3 个答案:

答案 0 :(得分:0)

test=c("27.82 / 27.82 / 23.65 / 27.82","19.87 / 19.87 / 19.14 / 19.87","32.25 / 32.25 / 31 / 32.25 / 31","79.39 / 79.39 / 79.39 / 79.39 / 83.36 / 79.39")
unlist(lapply(strsplit(test," / "),function(x) paste(rle(x)$values,collapse=" / ")))

基本上,我在test中建立了您的价格向量。这是怎么回事:

  1. 我用strsplit将您的1列向量的每一行分成几部分。
  2. 对于每个元素,我都使用uniq检查重复的连续元素(例如Unix rle),这会生成一个列表,其中包含一个名为values的元素,其中的值是唯一的被存储。
  3. 我使用paste paste将所有这些值{collapse}选项用于将分隔符设置为以前使用的分隔符。
  4. 由于这已生成一个列表,因此我unlist将其生成一列。

输出:

> unlist(lapply(strsplit(test," / "),function(x) paste(rle(x)$values,collapse=" / ")))
[1] "27.82 / 23.65 / 27.82"   "19.87 / 19.14 / 19.87"   "32.25 / 31 / 32.25 / 31" "79.39 / 83.36 / 79.39"  

顺便说一句,下一次,如果您为社区提供了可复制的示例(这样,读者不必自己将数据写到对象中),那就更好了,并显示到目前为止您已经尝试了什么。

答案 1 :(得分:0)

使用Get-Date -Uformat "%Y-%m-%d" 的方法略有不同:

数据

tidyverse

代码

vect <- c('27.82 / 27.82 / 23.65 / 27.82',
          '19.87 / 19.87 / 19.14 / 19.87',
          '32.25 / 32.25 / 31 / 32.25 / 31',
          '79.39 / 79.39 / 79.39 / 79.39 / 83.36 / 79.39')

输出

library(tidyverse)
vect %>% 
  str_split( ' / ') %>% 
  map(~.x[.x!=lag(.x) | is.na(lag(.x))]) %>% 
  map_chr(paste, collapse=' / ')

答案 2 :(得分:0)

数据: data <-data.frame(Des = c(“ a”,“ b”,“ c”,“ d”),price = c('27 .82 / 27.82 / 23.65 / 27.82','19 .87 / 19.87 / 19.14 / 19.87 ','32 .25 / 32.25 / 31 / 32.25 / 32.25','79.39 / 79.39 / 79.39 / 79.39 / 83.36 / 79.39'))

  Des                                         price
1   a                 27.82 / 27.82 / 23.65 / 27.82
2   b                 19.87 / 19.87 / 19.14 / 19.87
3   c            32.25 / 32.25 / 31 / 32.25 / 31
4   d 79.39 / 79.39 / 79.39 / 79.39 / 83.36 / 79.39

代码:

data$`New Column`<-gsub("\\b([\\w\\.]+)( / \\1\\b)+","\\1",data$price,perl = T)

结果:

Des                                         price            New Column
1   a                 27.82 / 27.82 / 23.65 / 27.82   27.82 / 23.65 / 27.82
2   b                 19.87 / 19.87 / 19.14 / 19.87   19.87 / 19.14 / 19.87
3   c               32.25 / 32.25 / 31 / 32.25 / 31   32.25 / 31 / 32.25 / 31
4   d 79.39 / 79.39 / 79.39 / 79.39 / 83.36 / 79.39   79.39 / 83.36 / 79.39