【问题标题】:I would like to mutate the values within a specific column into a single value in R我想将特定列中的值更改为 R 中的单个值
【发布时间】:2020-07-26 01:19:25
【问题描述】:

如何将不等于“阿姆斯特丹”或“柏林”或“爱丁堡”或“斯德哥尔摩”或“阿姆斯特丹-Zuidoost”的值转换为一个名为“其他城市”的值? 我的数据称为 Housingdata,我的变量称为“City”。

【问题讨论】:

    标签: r dplyr distinct-values


    【解决方案1】:

    我们可以使用%in% 和值列表来检查:

    cities <- c("Amsterdam", "Berlin", "Edinburgh", "Stockholm", "Amsterdam-Zuidoost")
    housingdata$City[!housingdata$City %in% cities] <- 'Other Cities'
    

    其他选项包括:

    transform(housingdata, City = replace(City, !City %in% cities, 'Other Cities'))
    

    或者使用dplyr

    library(dplyr)
    housingdata %>% mutate(City = if_else(City %in% cities, City, 'Other Cities'))
    

    housingdata %>%
       mutate(City = case_when(City %in% cities~ City, 
                              TRUE ~'Other Cities'))
    

    【讨论】:

      【解决方案2】:

      如果您想要 dplyr 解决方案,可以使用 mutate()case_when

      library(tidyverse)
      
      housingdata <-
        data.frame(
        stringsAsFactors = FALSE,
                      ID = c(1L, 2L, 3L, 4L, 5L, 6L, 7L),
                    City = c("Amsterdam","Berlin",
                             "Edinburgh","Stockholm","Amsterdam-Zuidoost","Chicago",
                             "Seattle")
      )
      
      housingdata_m <-
        housingdata %>% 
        mutate(Category = case_when(City %in% c("Amsterdam", "Berlin", "Edinburgh", "Stockholm", "Amsterdam-Zuidoost") ~ City,
                                                TRUE ~ "Other Cities"))
      

      【讨论】:

        【解决方案3】:

        使用dplyr 的选项是:

        library(dplyr)
        housingdata %>% 
          mutate(City = if_else(!City %in% c("Amsterdam", "Berlin", "Edinburgh", 
                                                 "Stockholm", "Amsterdam-Zuidoost"), 'Other Cities', City)
        

        当然,您可以创建一个新变量或覆盖现有的 City 变量,如我的示例所示。

        【讨论】:

          【解决方案4】:

          我怀疑 OP 真正想做的是summarize

          library(dplyr)
          targetcountries <- c("Amsterdam","Berlin","Edinburgh","Stockholm","Amsterdam-Zuidoost")
          housingdata %>%
            mutate(Country = case_when(Country %in% targetcountries ~ Country,
                                       TRUE ~ "Other")) %>% 
            group_by(Country) %>%
            summarize(Value = sum(Value))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-10-24
            • 1970-01-01
            • 1970-01-01
            • 2017-12-15
            • 2021-11-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多