【发布时间】:2021-02-14 06:45:37
【问题描述】:
我有这个数据框,我想创建一个新的分类变量“life.cat”,用于表示每个国家每年的“高”(> = 高于平均值 1 个标准差); “低”(
structure(list(country = c("Afghanistan", "Afghanistan", "Afghanistan",
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan",
"Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", "Albania",
"Albania", "Albania", "Albania", "Albania", "Albania", "Albania",
"Albania", "Albania", "Albania", "Albania", "Albania", "Algeria",
"Algeria", "Algeria", "Algeria", "Algeria", "Algeria"), continent = c("Asia",
"Asia", "Asia", "Asia", "Asia", "Asia", "Asia", "Asia", "Asia",
"Asia", "Asia", "Asia", "Europe", "Europe", "Europe", "Europe",
"Europe", "Europe", "Europe", "Europe", "Europe", "Europe", "Europe",
"Europe", "Africa", "Africa", "Africa", "Africa", "Africa", "Africa"
), year = c(1952L, 1957L, 1962L, 1967L, 1972L, 1977L, 1982L,
1987L, 1992L, 1997L, 2002L, 2007L, 1952L, 1957L, 1962L, 1967L,
1972L, 1977L, 1982L, 1987L, 1992L, 1997L, 2002L, 2007L, 1952L,
1957L, 1962L, 1967L, 1972L, 1977L), lifeExp = c(28.801, 30.332,
31.997, 34.02, 36.088, 38.438, 39.854, 40.822, 41.674, 41.763,
42.129, 43.828, 55.23, 59.28, 64.82, 66.22, 67.69, 68.93, 70.42,
72, 71.581, 72.95, 75.651, 76.423, 43.077, 45.685, 48.303, 51.407,
54.518, 58.014), pop = c(8425333L, 9240934L, 10267083L, 11537966L,
13079460L, 14880372L, 12881816L, 13867957L, 16317921L, 22227415L,
25268405L, 31889923L, 1282697L, 1476505L, 1728137L, 1984060L,
2263554L, 2509048L, 2780097L, 3075321L, 3326498L, 3428038L, 3508512L,
3600523L, 9279525L, 10270856L, 11000948L, 12760499L, 14760787L,
17152804L), gdpPercap = c(779.4453145, 820.8530296, 853.10071,
836.1971382, 739.9811058, 786.11336, 978.0114388, 852.3959448,
649.3413952, 635.341351, 726.7340548, 974.5803384, 1601.056136,
1942.284244, 2312.888958, 2760.196931, 3313.422188, 3533.00391,
3630.880722, 3738.932735, 2497.437901, 3193.054604, 4604.211737,
5937.029526, 2449.008185, 3013.976023, 2550.81688, 3246.991771,
4182.663766, 4910.416756)), row.names = c(NA, 30L), class = "data.frame")
到目前为止,我已经尝试过这段代码:
library(dplyr)
df1 %>%
group_by(continent, year) %>%
mutate(Mean = mean(lifeExp),
SD = sd(lifeExp),
life.cat = case_when(Mean > (Mean + SD) ~ 'High',
Mean < (Mean - SD) ~ 'Low',
TRUE ~ 'Mid' ), Mean = NULL, SD = NULL) %>%
ungroup
但是新列的输出都是“mid”,这是不可能的。谁能告诉我出了什么问题?
【问题讨论】:
-
欢迎来到 SO;如果下面的一些答案解决了您的问题,请接受 - 请参阅What should I do when someone answers my question?
标签: r dataframe categorical-data