【问题标题】:Filling a column with conditions and formulas用条件和公式填充列
【发布时间】:2022-11-03 16:19:06
【问题描述】:

我正在计算某些地块中开花部分的面积。然而,不同类型的植物有不同类型的测量值(例如,有些花,我们有整个花序的大小,有些我们只有单个花的大小)。我想使用不同的条件语句创建一个具有计算面积的列。这是一个示例数据框:


inflorescence_mm <- c("5", "NA", "NA")
flower_mm <- c("NA", "NA", "3")
corolla_mm <- c("NA", "2", "NA")
count <- c("100", "75", "80")

df <- data.frame(inflorescence_mm, flower_mm, corolla_mm, count)

我想使用 mutate 和 ifelse 创建一个名为“flower_area_mm2”的列,但是由于我使用公式来计算面积,所以我遇到了麻烦。

如果inflorescence_mm中有数据,那么我会使用(0.5花序_mm)^2 * pi * 计数。如果花序中有 NA,那么我会使用(0.5花_mm)^2 * pi * 计数。如果flower_mm 中有一个NA,那么我会使用(0.5*corolla_mm)^2 * pi * count。

任何人都可以帮助编写这样的条件语句吗?

我尝试在 mutate 中创建一个 ifelse 语句并使用 is.na,但这并没有填充新列。

【问题讨论】:

    标签: r if-statement dplyr mutate


    【解决方案1】:

    也许您的问题是由于您的df 列的格式。在这种情况下,如果将列转换为整数,则可以实现mutateifelse 函数。

    df %>% 
      mutate_if(is.character, as.integer) %>% 
      mutate(flower_area_mm2 = ifelse(!is.na(inflorescence_mm), 
                                      (0.5*inflorescence_mm)^2 * pi * count, 
                                      (0.5*corolla_mm)^2 * pi * count))
    

    输出:

      inflorescence_mm flower_mm corolla_mm count flower_area_mm2
    1                5        NA         NA   100       1963.4954
    2               NA        NA          2    75        235.6194
    3               NA         3         NA    80              NA
    

    【讨论】:

      【解决方案2】:

      我最终通过使用 case_when 解决了它:

      mutate(flower_area_mm2 = case_when(!is.na(inflorescence_mm) ~ 
                                         (0.5*inflorescence_mm)^2 * pi*count,
                                       is.na(flower_mm) ~ (0.5*corolla_mm)^2 * pi * count,
                                       is.na(inflorescence_mm) ~ (0.5* flower_mm)^2 * pi*count))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-08
        • 2023-01-13
        • 2022-09-23
        • 1970-01-01
        • 2021-05-21
        • 1970-01-01
        • 1970-01-01
        • 2020-08-11
        相关资源
        最近更新 更多