【问题标题】:How to append a specific string to rows based on column names with dplyr如何使用 dplyr 根据列名将特定字符串附加到行
【发布时间】:2019-12-03 09:58:34
【问题描述】:

我有一个包含蘑菇特征的数据框,例如:

SPECIES CAP.SHAPE CAP.SURFACE CAP.COLOR BRUISES    ODOR GILL.ATTACHMENT GILL.SPACING GILL.SIZE GILL.COLOR
1  PUNGENTIA    CONVEX       SCALY     BROWN     YES PUNGENT            FREE        CLOSE    NARROW      BLACK
2  YELLOWCAP    CONVEX       SCALY    YELLOW     YES  ALMOND            FREE        CLOSE     BROAD      BLACK
3 BELLSHROOM      BELL       SCALY     WHITE     YES   ANISE            FREE        CLOSE     BROAD      BROWN
  STALK.SHAPE STALK.ROOT STALK.SURFACE STALK.COLOR VEIL.COLOR RING.NUMBER RING.TYPE SPORE.PRINT.COLOR POPULATION
1   ENLARGING      EQUAL        SMOOTH      PURPLE      WHITE         ONE   PENDANT             BLACK  SCATTERED
2   ENLARGING       CLUB        SMOOTH      PURPLE      WHITE         ONE   PENDANT             BROWN   NUMEROUS
3   ENLARGING       CLUB        SMOOTH      PURPLE      WHITE         ONE   PENDANT             BROWN   NUMEROUS
  HABITAT
1   URBAN
2 GRASSES
3 MEADOWS

我想将一个字符串附加到与 CAP、GILL 和 STALK 相关的列的条目中,以便它们的第一个条目成为 CAP 列的 CONVEX.CAP、SCALY.CAP、BROWN.CAP、FREE.GILLS、CLOSE .GILLS、NARROW.GILLS,用于 GILL 列等等。我尝试使用 dplyr 包,并使用粘贴,如下所示:

reformatted_mushrooms <- mushrooms %>%
  mutate_at(.vars = c("CAP.SHAPE", "CAP.SURFACE", "CAP.COLOR"), .funs = 
              paste("CAP", sep = "."))

然而这会返回这个错误:

Error in get(.x, .env, mode = "function") : 
  object 'CAP' of mode 'function' was not found

我也尝试过使用 contains() 函数,如下所示:

reformatted_mushrooms <- mushrooms %>%
  mutate_at(.vars = contains("CAP"), .funs = paste("CAP"), sep = ".")

但这会产生以下错误:

Error: No tidyselect variables were registered

有人看到我在这里做错了吗?非常感谢。

【问题讨论】:

    标签: dplyr rstudio


    【解决方案1】:

    请确保您在问题中提供可重现的示例!否则,您将付出不必要的努力。

    library(tidyverse)
    
    tibble::tibble('CAP.SHAPE' = c(1:5),
                   'RANDOM.SHAPE' = c(11:15)) %>%
      mutate_at(vars(contains("CAP")), ~ paste0(.x, ".CAP"))
    
     A tibble: 5 x 2
      CAP.SHAPE RANDOM.SHAPE
      <chr>            <int>
    1 1.CAP               11
    2 2.CAP               12
    3 3.CAP               13
    4 4.CAP               14
    5 5.CAP               15
    

    【讨论】:

    • 您好弗洛里安,感谢您的回复!这对我有用。你能解释一下我如何确保我提供的东西在未来可以重现吗?
    • 嗨,Daniel,可重现意味着您提供了我可以在我的代码上测试的数据。你可以使用例如datapasta-package 可以轻松地直接在 RStudio 中插入数据。您还可以像我在答案中所做的那样生成假数据(小标题)
    猜你喜欢
    • 2017-06-22
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2012-07-12
    • 2021-01-19
    • 2023-03-10
    相关资源
    最近更新 更多