r这里是初学者。
我正试图用以下代码创建一个新的专栏:
data %>% mutate(age_cat = if_else(suspect_age %in% 0:14, "Under 15", if_else(suspect_age %in% 15:24, "15-24", ifelse(suspect_age %in% 25:34, "25-34", ifelse(suspect_age %in% 35:44, "35-44", ifelse(suspect_age %in% 45:54, "45-54", ifelse(suspect_age %in% 55:64, "55-64", "65 & over")))))))
但实际上并没有创建新的专栏,这是为什么?
提前谢谢!
使用tidyverse
,可以使用case_when
而不是所有的ifelse
语句。如果~
左侧是TRUE
,则执行~
右侧的内容。对于新列,您只需要将其分配给一个变量。或者,如果您只需要快速查看数据帧,那么您可以添加%>% view
。
library(tidyverse)
results <- data %>%
mutate(age_cat = case_when(suspect_age %in% 0:14 ~ "Under 15",
suspect_age %in% 15:24 ~ "15-24",
suspect_age %in% 25:34 ~ "25-34",
suspect_age %in% 35:44 ~ "35-44",
suspect_age %in% 45:54 ~ "45-54",
suspect_age %in% 55:64 ~ "55-64",
TRUE ~ "65 & over"))
输出
results
suspect_age age_cat
1 12 Under 15
2 77 65 & over
3 21 15-24
4 36 35-44
5 58 55-64
6 11 Under 15
7 74 65 & over
8 92 65 & over
9 32 25-34
10 31 25-34
或者另一种选择是使用cut
:
data %>%
mutate(age_cat = cut(suspect_age, breaks = c(0, seq(14, 64, 10), 110),
labels = c("Under 15", "15-24", "25-34", "35-44", "45-54", "55-64", "65 & over"),
include.lowest = TRUE))
数据
data <- structure(list(suspect_age = c(12L, 77L, 21L, 36L, 58L, 11L,
74L, 92L, 32L, 31L)), class = "data.frame", row.names = c(NA,
-10L))
我假设您希望在运行该命令后,data
中会出现新列。
在这种情况下,你需要分配它。
data <- data %>% mutate(age_cat = if_else(suspect_age %in% 0:14, "Under 15", if_else(suspect_age %in% 15:24, "15-24", ifelse(suspect_age %in% 25:34, "25-34", ifelse(suspect_age %in% 35:44, "35-44", ifelse(suspect_age %in% 45:54, "45-54", ifelse(suspect_age %in% 55:64, "55-64", "65 & over")))))))