【问题标题】:change ID columns of every second ID group of dataframe更改数据帧的每第二个 ID 组的 ID 列
【发布时间】:2017-01-12 11:58:07
【问题描述】:

我有一个带有 ID 列的大数据框,前 8208 行的 ID 为 1,接下来的 432 行的 ID 为 2,接下来的 8208 行的 ID 为 3,接下来的 432 行的 ID 为 3,以此类推。

现在我想重命名 ID,以便前 432 行的 ID 为 1.1,接下来的 432 行的 ID 为 1.2,依此类推 - 直到 1.19,第 7777:8208 行。然后接下来的 432 行保留 ID 2,对于接下来的 8208,应该做同样的事情:ID 2.1、2.2 等,直到 2.19。

我已经试过了

    split(x, seq(1:19))

然后

 tapply(df, split)

但这会改变行的顺序并且显然不会重命名 ID 列。 所以基本上只需要更改奇数 ID,方法是将它们分成 19 个相等的部分,保持行顺序相同并重命名这些部分,以便原始 ID 添加 .1、.2、.3 等直到 .19

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    也可以考虑这项工作,并且在视觉上更容易一些。它会发出警告,但只是因为并非所有值都被替换

    within(df2, id[df2$id %% 2 != 0] <- paste(id, rep(1:19, 432), sep = '.'))
    

    【讨论】:

      【解决方案2】:

      你可以试试:

      df[df$id%%2!=0,"id"]=paste0(df[df$id%%2!=0,"id"],".",rep(rep(seq(1,19),each=432),length(df[df$id%%2!=0,"id"])/8208))
      

      我假设您有多个 8208 行。

      【讨论】:

      • 谢谢,但这并没有考虑到每秒ID只有432行,因此它的ID不需要更改。只有奇数 ID 需要分成 19 等份。我有 156 个不同的 ID,但只有 78 个(其中一半)有 8208 行,另一半有 432 行,总共有 673920 行。
      • 我的理解有误,我会努力改正的。
      • 编辑为仅更改奇数 ID。
      • 太棒了!谢谢!!
      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 2022-09-30
      • 1970-01-01
      • 2012-04-01
      • 2018-04-28
      相关资源
      最近更新 更多