【问题标题】:R dplyr, problem renaming values based on a value in another columnR dplyr,根据另一列中的值重命名值的问题
【发布时间】:2022-11-14 09:10:29
【问题描述】:

我不确定这个 mutate 函数有什么问题。使用这行代码时,它不会将值更改为所需的值。

dataADstudies_1639_5cols <- dataADstudies_1639_5cols_2D %>%
  mutate(Activity = if_else(Parameter == grepl('ANT_L', Parameter), "Phot_Ant_TL", Activity))

我的 df 看起来像这样:

    Nr      Section Activity    Parameter       Value
44  1639_1  Day 0   Photo_2D    ANT_L_Ery       18.932
45  1639_1  Day 0   Photo_2D    ANT_L_EryRat    1.189
46  1639_1  Day 0   Photo_2D    ANT_L_Rough     9.552
47  1639_1  Day 0   Photo_2D    ANT_NL_Ery      0.583
48  1639_1  Day 0   Photo_2D    ANT_NL_EryRa    0.886
49  1639_1  Day 0   Photo_2D    ANT_NL_Rough    3.958

当参数值包含 ANT_L 时,我想将活动列中的值重新编码为 Phot_Ant_TL,然后当参数值包含 ANT_NL 时将活动列中的值更改为 Phot_Ant_NL 但我认为我需要单独的代码行

期望的结果:

    Nr      Section Activity    Parameter       Value
44  1639_1  Day 0   Phot_Ant_TL ANT_L_Ery       18.932
45  1639_1  Day 0   Phot_Ant_TL ANT_L_EryRat    1.189
46  1639_1  Day 0   Phot_Ant_TL ANT_L_Rough     9.552
47  1639_1  Day 0   Phot_Ant_NL ANT_NL_Ery      0.583
48  1639_1  Day 0   Phot_Ant_NL ANT_NL_EryRa    0.886
49  1639_1  Day 0   Phot_Ant_NL ANT_NL_Rough    3.958

【问题讨论】:

    标签: r dplyr recode


    【解决方案1】:

    使用 case_when 而不是 if_else 和 substr 而不是 grepl 它可以工作:

    dataADstudies_1639_5cols <- dataADstudies_1639_5cols_2D %>%
      mutate(Activity = case_when(substr(Parameter, 1 , 6) == "ANT_NL" ~ "Phot_Ant_NL", 
      T ~ "Phot_Ant_TL"))`
    

    【讨论】:

      【解决方案2】:

      尝试像这样使用grepl -

      library(dplyr)
      
      dataADstudies_1639_5cols <- dataADstudies_1639_5cols_2D %>%
        mutate(Activity = case_when(grepl('ANT_L', Parameter) ~ "Phot_Ant_TL", 
                                    grepl('ANT_NL', Parameter) ~ "Phot_Ant_NL"))
      
      dataADstudies_1639_5cols
      #      Nr Section    Activity    Parameter  Value
      #1 1639_1    Day0 Phot_Ant_TL    ANT_L_Ery 18.932
      #2 1639_1    Day0 Phot_Ant_TL ANT_L_EryRat  1.189
      #3 1639_1    Day0 Phot_Ant_TL  ANT_L_Rough  9.552
      #4 1639_1    Day0 Phot_Ant_NL   ANT_NL_Ery  0.583
      #5 1639_1    Day0 Phot_Ant_NL ANT_NL_EryRa  0.886
      #6 1639_1    Day0 Phot_Ant_NL ANT_NL_Rough  3.958
      

      如果case_when 中的任何条件都不匹配,它将在Activity 列中返回NA。

      数据

      如果您在reproducible format 中提供数据,则更容易提供帮助

      dataADstudies_1639_5cols_2D <- structure(list(Nr = 
      c("1639_1", "1639_1", "1639_1", "1639_1", 
      "1639_1", "1639_1"), Section = c("Day0", "Day0", "Day0", "Day0", 
      "Day0", "Day0"), Activity = c("Photo_2D", "Photo_2D", "Photo_2D", 
      "Photo_2D", "Photo_2D", "Photo_2D"), Parameter = c("ANT_L_Ery", 
      "ANT_L_EryRat", "ANT_L_Rough", "ANT_NL_Ery", "ANT_NL_EryRa", 
      "ANT_NL_Rough"), Value = c(18.932, 1.189, 9.552, 0.583, 0.886, 
      3.958)), class = "data.frame", row.names = c(NA, -6L))
      

      【讨论】:

        猜你喜欢
        • 2020-10-03
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-10
        • 2016-02-23
        • 2022-01-23
        相关资源
        最近更新 更多