【问题标题】:Data frame row duplication in RR中的数据框行重复
【发布时间】:2021-11-11 20:06:33
【问题描述】:

我目前有一个看起来像的数据框

Trial # Header Header 2 Header 3
1 1 1.1 1.2
2 2 2.1 2.2
3 3 3.1 3.2
4 4 4.1 4.2

我需要添加 mutate 数据框,以便有一个 year 列,并且每个试验重复 3 次。看起来像:

Trial # Header Header 2 Header 3 Year
1 1 1.1 1.2 1
1 1 1.1 1.2 2
1 1 1.1 1.2 3
2 2 2.1 2.2 1
2 2 2.1 2.2 2
2 2 2.1 2.2 3
3 3 3.1 3.2 1
3 3 3.1 3.2 2
3 3 3.1 3.2 3
4 4 4.1 4.2 1
4 4 4.1 4.2 2
4 4 4.1 4.2 3

我不知道如何去完成这个,所以任何帮助表示赞赏!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    非常直接,你可以这样做:

    result = original_data[rep(1:nrow(original_data, each = 3), ]
    result$year = rep(1:3, times = nrow(original_data))
    

    如果您有其他想要组合的列,则更高级、更通用,我们可以使用merge 来实现cross join

    result = merge(original_data, data.frame(year = 1:3), all = TRUE)
    

    【讨论】:

    • 我相信merge(df, list(year=1:3)) 也应该可以工作
    • 当我这样做时,生成的数据框会按年份分组。如何获取它以便按试用号分组?
    • @PythonSOS 不,数据绝不会分组。只是安排好了。不分组。如果按年份或试用号排列也没有错。所有结果计算都是一样的。只需按试用号订购即可,即with(a<-merge(df, list(year =1:3)), a[order(Trial), ])
    【解决方案2】:
    df %>%
      mutate(year = list(1:3))%>%
      unnest(year)
    
    # A tibble: 12 x 5
       Trial Header Header.2 Header.3  year
       <int>  <int>    <dbl>    <dbl> <int>
     1     1      1      1.1      1.2     1
     2     1      1      1.1      1.2     2
     3     1      1      1.1      1.2     3
     4     2      2      2.1      2.2     1
     5     2      2      2.1      2.2     2
     6     2      2      2.1      2.2     3
     7     3      3      3.1      3.2     1
     8     3      3      3.1      3.2     2
     9     3      3      3.1      3.2     3
    10     4      4      4.1      4.2     1
    11     4      4      4.1      4.2     2
    12     4      4      4.1      4.2     3
    

    【讨论】:

      猜你喜欢
      • 2015-06-26
      • 2020-04-03
      • 2013-08-14
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      相关资源
      最近更新 更多