【发布时间】:2020-07-26 01:19:25
【问题描述】:
如何将不等于“阿姆斯特丹”或“柏林”或“爱丁堡”或“斯德哥尔摩”或“阿姆斯特丹-Zuidoost”的值转换为一个名为“其他城市”的值? 我的数据称为 Housingdata,我的变量称为“City”。
【问题讨论】:
标签: r dplyr distinct-values
如何将不等于“阿姆斯特丹”或“柏林”或“爱丁堡”或“斯德哥尔摩”或“阿姆斯特丹-Zuidoost”的值转换为一个名为“其他城市”的值? 我的数据称为 Housingdata,我的变量称为“City”。
【问题讨论】:
标签: r dplyr distinct-values
我们可以使用%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'))
【讨论】:
如果您想要 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"))
【讨论】:
使用dplyr 的选项是:
library(dplyr)
housingdata %>%
mutate(City = if_else(!City %in% c("Amsterdam", "Berlin", "Edinburgh",
"Stockholm", "Amsterdam-Zuidoost"), 'Other Cities', City)
当然,您可以创建一个新变量或覆盖现有的 City 变量,如我的示例所示。
【讨论】:
我怀疑 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))
【讨论】: