R语言 转换或移除数据框中多余的行数

b5lpy0ml  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(84)

我有一个包含个人数据的数据框,如下所示:

data2 <- data.frame(Name = c("Peter Parker", "Peter Parker", "Peter Parker", 
"Peter Parker", "Peter Parker", "Peter Parker", "Peter Parker", "Benny Thompson", "Benny Thompson", 
"Benny Thompson", "Benny Thompson", "Benny Thompson", "Mylo Thony"
), Result = c(150L, 155L, 156L, 154L, 158L, 159L, 159L, 130L, 132L, 138L, 
140L, 139L, 177L), Date = c("2018-03-03", "2018-03-04", "2018-03-05", 
"2018-03-06", "2018-03-07", "2018-03-09", "2018-03-13", "2018-03-03", "2018-03-04", "2018-03-05", 
"2018-03-07", "2018-03-09", "2018-03-11"))
> data2
             Name Result        Date
1    Peter Parker    150  2018-03-03
2    Peter Parker    155  2018-03-04
3    Peter Parker    156  2018-03-05
4    Peter Parker    154  2018-03-06
5    Peter Parker    158  2018-03-07
6    Peter Parker    159  2018-03-09
7    Peter Parker    159  2018-03-13
8  Benny Thompson    130  2018-03-03
9  Benny Thompson    132  2018-03-04
10 Benny Thompson    138  2018-03-05
11 Benny Thompson    140  2018-03-07
12 Benny Thompson    139  2018-03-09
13     Mylo Thony    177  2018-03-11

它有更多的列,为了简洁起见,我省略了这些列。
我想删除每个条目超过5个的人的过多条目。在这个例子中,Benny正好有5个条目,所以他可以保持“原样”。Mylo只有一个条目,所以他的条目最终将在我的代码的稍后阶段处理(将被删除)。对于彼得我首选的解决方案将是创建3组5个条目,与“彼得帕克1”,“Peter Parker2”和“Peter Parker3”作为名字。我并不关心确切的名字,因为只有结果和最终的日期用于一些预测。我希望它看起来像这样:

Name Result        Date
   Peter Parker1    150  2018-03-03
   Peter Parker1    155  2018-03-04
   Peter Parker1    156  2018-03-05
   Peter Parker1    154  2018-03-06
   Peter Parker1    158  2018-03-07
   Peter Parker2    155  2018-03-04
   Peter Parker2    156  2018-03-05
   Peter Parker2    154  2018-03-06
   Peter Parker2    158  2018-03-07
   Peter Parker2    159  2018-03-09
   Peter Parker3    156  2018-03-05
   Peter Parker3    154  2018-03-06
   Peter Parker3    158  2018-03-07
   Peter Parker3    159  2018-03-09
   Peter Parker3    159  2018-03-13
  Benny Thompson    130  2018-03-03
  Benny Thompson    132  2018-03-04
  Benny Thompson    138  2018-03-05
  Benny Thompson    140  2018-03-07
  Benny Thompson    139  2018-03-09
      Mylo Thony    177  2018-03-11

我不知道如何实现这一点。如果这是不可能的,我只想删除彼得所有多余的条目,只保留前5个,这样我至少可以很好地利用那些前5个

ttp71kqs

ttp71kqs1#

library(tidyverse)

data2 <- data.frame(Name = c("Peter Parker", "Peter Parker", "Peter Parker", 
                             "Peter Parker", "Peter Parker", "Peter Parker", "Peter Parker", "Benny Thompson", "Benny Thompson", 
                             "Benny Thompson", "Benny Thompson", "Benny Thompson", "Mylo Thony"
), Result = c(150L, 155L, 156L, 154L, 158L, 159L, 159L, 130L, 132L, 138L, 
              140L, 139L, 177L), Date = c("2018-03-03", "2018-03-04", "2018-03-05", 
                                          "2018-03-06", "2018-03-07", "2018-03-09", "2018-03-13", "2018-03-03", "2018-03-04", "2018-03-05", 
                                          "2018-03-07", "2018-03-09", "2018-03-11"))

data2 %>%
  group_by(Name) %>%
  mutate(
    n = n(),
    group = ceiling(row_number()/5),
    Name = if_else(n>5, paste0(Name, group), Name)
  ) %>%
  select(-n,-group)
#> # A tibble: 13 × 3
#> # Groups:   Name [4]
#>    Name           Result Date      
#>    <chr>           <int> <chr>     
#>  1 Peter Parker1     150 2018-03-03
#>  2 Peter Parker1     155 2018-03-04
#>  3 Peter Parker1     156 2018-03-05
#>  4 Peter Parker1     154 2018-03-06
#>  5 Peter Parker1     158 2018-03-07
#>  6 Peter Parker2     159 2018-03-09
#>  7 Peter Parker2     159 2018-03-13
#>  8 Benny Thompson    130 2018-03-03
#>  9 Benny Thompson    132 2018-03-04
#> 10 Benny Thompson    138 2018-03-05
#> 11 Benny Thompson    140 2018-03-07
#> 12 Benny Thompson    139 2018-03-09
#> 13 Mylo Thony        177 2018-03-11

reprex package(v2.0.1)于2023年1月6日创建
你在找这种东西吗?

相关问题