【问题标题】:How do you add a character string for every second row in R?如何在 R 中每隔一行添加一个字符串?
【发布时间】:2020-02-17 09:56:25
【问题描述】:

我想将一个字符串连接到每隔一行的一列:

从这里:

+------+------+
| col1 | col2 |
+------+------+
| A    |   11 |
| B    |   22 |
| A    |   22 |
| A    |   33 |
| A    |   44 |

+------+------+

为此(将 _a 添加到第一个列):

+------+------+
| col1 | col2 |
+------+------+
| A    |   11 |
| B_a  |   22 |
| A    |   22 |
| A_a  |   33 |
| A    |   44 |
+------+------+

感谢您的帮助!最好我想使用 paste0() 或 tidyverse 中的任何东西!

【问题讨论】:

    标签: r dplyr tidyverse stringr


    【解决方案1】:

    你可以试试:

    df %>%
     mutate(col1 = if_else(row_number() %% 2 == 0, paste0(col1, "_A"), col1))
    
      col1 col2
    1    A   11
    2  B_A   22
    3    A   22
    4  A_A   33
    5    A   44
    

    【讨论】:

    • 非常感谢!成功了!
    【解决方案2】:

    在base R中使用向量循环:

    df$col1 <- paste0(df$col1, c("", "_a"))
    df
      col1 col2
    1    A   11
    2  B_a   22
    3    A   22
    4  A_a   33
    5    A   44
    

    可复现的例子(请下次自己提供):

    df <- data.frame(
      col1 = c("A", "B", "A", "A", "A"),
      col2 = c(11, 22, 22, 33, 44),
      stringsAsFactors = FALSE
    )
    

    【讨论】:

    • 它如何影响每一第二行?
    • @JayAr 将"" 粘贴到第一行,然后将"_a" 粘贴到第二行并重复直到df$col1 完成。另一个例子:paste(1:9, letters[1:3])
    【解决方案3】:

    我们可以使用向量循环将col1paste "a_" 的备用值子集给它。

    df$col1[c(FALSE, TRUE)] <- paste0(df$col1[c(FALSE, TRUE)], "_a")
    df
    #  col1 col2
    #1    A   11
    #2  B_a   22
    #3    A   22
    #4  A_a   33
    #5    A   44
    

    确保col1 是类字符而不是因素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      相关资源
      最近更新 更多