【问题标题】:Repeating specific rows in R重复 R 中的特定行
【发布时间】:2021-10-27 06:18:40
【问题描述】:

我想在第 1 列中重复出现“肺气肿/慢性支气管炎”的每一行。对于每次这样的重复,我想在第 2 列中为 2 行中的一行显示“肺气肿”,在第 2 列中显示“慢性支气管炎”另一列的第 2 列。我不确定我是否解释得很好 - 很抱歉造成混乱。

目前是这样的: 第 1 列示例: 皮肤癌 直肠癌 肺气肿/慢性支气管炎

第 2 列示例: 皮肤肿瘤 直肠肿瘤 不适用

这就是我想要的样子: 第 1 列示例: 皮肤癌 直肠癌 气肿 慢性支气管炎

第 2 列示例: 皮肤肿瘤 直肠肿瘤 气肿 慢性支气管炎

【问题讨论】:

  • rbind(df,df[23,])
  • 对于您要重复的内容是否有一般规则?您是否总是只想重复第 23 行?新创建的行在哪里结束有关系吗?如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能的解决方案的示例输入和所需输出,那么为您提供帮助会更容易。
  • df[ c(seq_int(nrow(df)) , 23) , ]。只是一组带有额外 23 的整数行索引。
  • 根据@user2974951 的评论,执行此操作的一般功能是:rep_rows <- function(x, rows) {rbind(x, x[rows, ])}。你可以这样使用它:rep_rows(df, 23) 或者你可以有几行重复:rep_rows(df, c(23, 24, 30:34))
  • @Nivi 根据 cmets,您可能值得编辑您的问题并澄清上下文。例如,您是否有第 1 列,其中行值可能包含多个诊断(例如,肺气肿和慢性支气管炎),并且您希望将这些诊断包含在第 2 列的不同行中?更详细地描述您目前在数据方面拥有的内容,以及您最终想要拥有的内容(这是上面提到的“可重现的示例”),在这里真的会有很大帮助。它不需要很复杂 - 甚至是一个示例,几行示例组成的数据开始。

标签: r repeat


【解决方案1】:

从描述中并不完全清楚,但这可能会对您有所帮助。

假设你有一个如下所示的 data.frame:

                          col1             col2
1                  skin cancer   Skin Neoplasms
2                rectal cancer Rectal Neoplasms
3 emphysema/chronic bronchitis             <NA>

并且您想要拆分带有斜线 (/) 的条目,例如在肺气肿和慢性支气管炎之间。

您可以使用tidyr 中的separate_rows,并使用“/”作为分隔符。您还可以包含 coalesce 以使用条目更新第 2 列(替换缺失的数据),如第 1 列。据我所知,这与您的预期输出相符。

library(tidyverse)

df %>%
  separate_rows(col1, sep = "/") %>%
  mutate(col2 = coalesce(col1))

输出

  col1               col2              
  <chr>              <chr>             
1 skin cancer        skin cancer       
2 rectal cancer      rectal cancer     
3 emphysema          emphysema         
4 chronic bronchitis chronic bronchitis

【讨论】:

    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 2020-12-08
    • 2016-12-30
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多