【问题标题】:Replacing certain values in a column with words用单词替换列中的某些值
【发布时间】:2021-07-16 19:57:37
【问题描述】:

我的目标是根据范围将特定列的数值替换为某些单词,以便在未来的分类测试中使用。我试图在下面更改此数据框:

让我们将此数据框称为 DF

SubjectID ColumnA ColumnB Column C
Subject1 38 2.3 2.1
Subject2 12 2.1 2.0
Subject3 1 1.1 1.9
Subject4 34 3.2 1.5
Subject5 1 1.7 1.5
Subject6 56 3.9 1.7

要实现一个像这里这样的数据框:

SubjectID ColumnA ColumnB Column C
Subject1 Mid 2.3 2.1
Subject2 Low 2.1 2.0
Subject3 Low 1.1 1.9
Subject4 Mid 3.2 1.5
Subject5 Low 1.7 1.5
Subject6 High 3.9 1.7

所以在这种情况下,我只想根据数据值所在的特定范围更改 columnA 的值名称。

对于这个例子: Low 值表示低于 30 的值。 Mid 的值表示 30 到 50 之间的值 High 的值表示高于 50 的值

最好的方法是什么?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我们可以使用case_when

    library(dplyr)
    DF <- DF %>%
        mutate(ColumnA = case_when(ColumnA < 30 ~ "Low", 
            between(ColumnA, 30, 50) ~ "Mid", TRUE ~ "High"))
    DF
      SubjectID ColumnA ColumnB ColumnC
    1  Subject1     Mid     2.3     2.1
    2  Subject2     Low     2.1     2.0
    3  Subject3     Low     1.1     1.9
    4  Subject4     Mid     3.2     1.5
    5  Subject5     Low     1.7     1.5
    6  Subject6    High     3.9     1.7
    

    另一个方便的选项是cut from base R

    cut(DF$ColumnA, breaks = c(-Inf, 30, 50, Inf), labels = c("Low", "Mid", "High"))
    [1] Mid  Low  Low  Mid  Low  High
    Levels: Low Mid High
    

    数据

    DF <- structure(list(SubjectID = c("Subject1", "Subject2", "Subject3", 
    "Subject4", "Subject5", "Subject6"), ColumnA = c(38L, 12L, 1L, 
    34L, 1L, 56L), ColumnB = c(2.3, 2.1, 1.1, 3.2, 1.7, 3.9), ColumnC = c(2.1, 
    2, 1.9, 1.5, 1.5, 1.7)), class = "data.frame", row.names = c(NA, 
    -6L))
    

    【讨论】:

      【解决方案2】:

      如果您更喜欢base R 解决方案,您可以使用嵌套的ifelse

      DF$ColumnA <- ifelse(DF$ColumnA < 30, "Low",
                           ifelse(DF$ColumnA >= 30 & DF$ColumnA <= 50, "Mid", "High"))
      

      结果:

      DF
        SubjectID ColumnA ColumnB ColumnC
      1  Subject1     Mid     2.3     2.1
      2  Subject2     Low     2.1     2.0
      3  Subject3     Low     1.1     1.9
      4  Subject4     Mid     3.2     1.5
      5  Subject5     Low     1.7     1.5
      6  Subject6    High     3.9     1.7
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-09-27
        • 2021-08-20
        • 2020-01-30
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        • 2012-11-09
        • 1970-01-01
        相关资源
        最近更新 更多