R语言 根据大型、不整洁数据集中某列内以前的条目提取特定行

im9ewurl  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(164)

我有一个相当不整洁的大型数据集,可以用下面的代码大致表示。

set.seed(1)
col_1 <- c(rep(c(1888:1891), each = 50), rep(c(1892:1895), each = 30))

a <- c('shirt', 'blue', 'red', 'green', 'pants', 'blue', 'red', 'green', 'yellow', 'sweater', 'black', 'orange', 'purple')
b <- rep(a, 30)
col_2 <- b[c(1:320)]

df <- data.frame(col_1, col_2)

其中每种颜色指的是最后提到的衣服的颜色。
我想问你的是,我将如何着手提取,在每年的基础上,不同的颜色,毛衣可在?
然而,与真实的数据存在一些差异:

  • 真实的数据集是每月一次,但我只对每种颜色是否每年出现感兴趣
  • 真实的的数据集是少得多的重复,颜色退出和进入随机每月
  • 真实的的数据集每个月包含大约12种不同的“服装”。

我曾想过尝试一些粗糙的东西,如简单地提取下一个~50个数据点后,每个“毛衣”发生,但我甚至不知道如何做到这一点,并希望一些更干净的,因为这仍然需要大量的整理,因为“毛衣”将发生至少12次,每年。

3mpgtkmj

3mpgtkmj1#

首先把所有的衣服都放到自己的一栏里:

library(dplyr)

garments <- c("shirt", "pants", "sweater")

df2 <- df %>%
  group_by(garment = cumsum(col_2 %in% garments)) %>%
  mutate(garment = first(col_2)) %>%
  ungroup() %>%
  filter(!(col_2 %in% garment))
  
df2
# A tibble: 246 × 3
   col_1 col_2  garment
   <int> <chr>  <chr>  
 1  1888 blue   shirt  
 2  1888 red    shirt  
 3  1888 green  shirt  
 4  1888 blue   pants  
 5  1888 red    pants  
 6  1888 green  pants  
 7  1888 yellow pants  
 8  1888 black  sweater
 9  1888 orange sweater
10  1888 purple sweater
# … with 236 more rows

然后,您可以筛选特定服装(如毛衣)每年的不同值:
一个二个一个一个

相关问题