我得到这个错误:
Error: `f` must be a factor (or character vector)
下面是代码。
library(tidyverse)
library(scales)
theme_set(theme_light())
recent_grads <- read.csv("https://raw.githubusercontent.com/fivethirtyeight/data/master/college-majors/recent-grads.csv")
head(recent_grads)
# recent_grads <- read_csv("https://raw.githubusercontent.com/fivethirtyeight/data/master/college-majors/recent-grads.csv")
majors_processed <- recent_grads %>%
arrange(desc(Median)) %>%
mutate(Major = str_to_title(Major),
Major = fct_reorder(Major, Median))
by_major_category <- majors_processed %>%
filter(!is.na(Total)) %>%
group_by(Major_category) %>%
summarize(Men = sum(Men),
Women = sum(Women),
Total = sum(Total),
MedianSalary = sum(as.numeric(Median * Sample_size)) / sum(Sample_size)) %>%
mutate(ShareWomen = Women / Total) %>%
arrange(desc(ShareWomen))
majors_processed %>%
mutate(Major_category = fct_reorder(Major_category, Median)) %>%
ggplot(aes(Major_category, Median, fill = Major_category)) +
geom_boxplot()
majors_processed %>%
arrange(desc(Total)) %>%
head(20) %>%
mutate(Major = fct_reorder(Major, Total)) %>%
gather(Gender, Number, Men, Women) %>%
ggplot(aes(Major, Number, fill = Gender)) +
geom_col() +
coord_flip()
library(ggrepel)
by_major_category %>%
mutate(Major_category = fct_lump(by_major_category, 6)) %>%
ggplot(aes(ShareWomen, MedianSalary, color = by_major_category)) +
geom_point() +
geom_smooth(method = "lm") +
geom_text_repel(aes(label = by_mjor_category), force = .2) +
expand_limits(y = 0)
library(plotly)
g <- majors_processed %>%
mutate(Major_category = fct_lump(Major_category, 4)) %>%
ggplot(aes(ShareWomen, Median, color = Major_category, size = Sample_size, label = Major)) +
geom_point() +
geom_smooth(aes(group = 1), method = "lm") +
scale_x_continuous(labels = percent_format()) +
scale_y_continuous(labels = dollar_format()) +
expand_limits(y = 0)
ggplotly(g)
library(plotly)
g <- majors_processed %>%
mutate(Major_category = fct_lump(Major_category, 4)) %>%
ggplot(aes(ShareWomen, Median, color = Major_category, size = Sample_size, label = Major)) +
geom_point() +
geom_smooth(aes(group = 1), method = "lm") +
scale_x_continuous(labels = percent_format()) +
scale_y_continuous(labels = dollar_format()) +
expand_limits(y = 0)
ggplotly(g)
library(broom)
majors_processed %>%
select(Major, Major_category, Total, ShareWomen, Sample_size, Median) %>%
add_count(Major_category) %>%
filter(n >= 10) %>%
nest(-Major_category) %>%
mutate(model = map(data, ~ lm(Median ~ ShareWomen, data = ., weights = Sample_size)),
tidied = map(model, tidy)) %>%
unnest(tidied) %>%
filter(term == "ShareWomen") %>%
arrange(estimate) %>%
mutate(fdr = p.adjust(p.value, method = "fdr"))
majors_processed %>%
filter(Sample_size >= 100) %>%
mutate(IQR = P75th - P25th) %>%
arrange(desc(IQR))
majors_processed %>%
ggplot(aes(Sample_size, Median)) +
geom_point() +
geom_text(aes(label = Major), check_overlap = TRUE, vjust = 1, hjust = 1) +
scale_x_log10()
knitr::knit_exit()
# What were the most common *majors*? (Since there were 173, we're not going to show them all).
majors_processed %>%
mutate(Major = fct_reorder(Major, Total)) %>%
arrange(desc(Total)) %>%
head(20) %>%
ggplot(aes(Major, Total, fill = Major_category)) +
geom_col() +
coord_flip() +
scale_y_continuous(labels = comma_format()) +
labs(x = "",
y = "Total # of graduates")
majors_processed %>%
group_by(Major_category) %>%
summarize(Median = median(Median)) %>%
mutate(Major_category = fct_reorder(Major_category, Median)) %>%
ggplot(aes(Major_category, Median)) +
geom_col() +
scale_y_continuous(labels = dollar_format()) +
coord_flip()
# What are the lowest earning majors?
majors_processed %>%
filter(Sample_size >= 100) %>%
tail(20) %>%
ggplot(aes(Major, Median, color = Major_category)) +
geom_point() +
geom_errorbar(aes(ymin = P25th, ymax = P75th)) +
expand_limits(y = 0) +
coord_flip()
谁能告诉我什么是错在这里?我甚至不看在代码中的“F”。我不认为这是一个变量,或在所有东西。
我在这里以下的例子。
https://github.com/dgrtwo/data-screencasts/blob/master/college-majors.Rmd
你最初的错误就在于里面的代码块内fct_lump
功能mutate
内:
by_major_category %>%
mutate(Major_category = fct_lump(by_major_category, 6)) %>%
ggplot(aes(ShareWomen, MedianSalary, color = by_major_category)) +
geom_point() +
geom_smooth(method = "lm") +
geom_text_repel(aes(label = by_major_category), force = .2) +
### Further, typo below
# geom_text_repel(aes(label = by_mjor_category), force = .2) +
expand_limits(y = 0)
如果检查fct_lump
:
> mutate(Major_category = fct_lump(by_major_category, 6))
Error: `f` must be a factor (or character vector).
> fct_lump(by_major_category, 6)
Error: `f` must be a factor (or character vector).
> ?fct_lump
> # f: A factor (or character vector).
> class(by_major_category)
[1] "tbl_df" "tbl" "data.frame"
f
是传递给你的fct_lump
函数的第一个参数,它被保存在by_major_category
,但它不是一个因素或字符串。
以针对特定代码快速搜索,正确制定块使用Major_category
为f
:
by_major_category %>%
mutate(Major_category = fct_lump(Major_category, 6)) %>%
ggplot(aes(ShareWomen, MedianSalary, color = Major_category)) +
geom_point() +
geom_smooth(method = "lm") +
geom_text_repel(aes(label = Major_category), force = .2) +
expand_limits(y = 0)
(从你的代码试图跟随,但在几个关键点不同原生https://github.com/dgrtwo/data-screencasts/blob/master/college-majors.Rmd找到)
这就产生了正确的阴谋。换句话说,你应该指着by_major_category$Major_category
,而不是它的父数据结构的因素。
在你的代码块和奇数knitr::knit_exit()
错字推导,以及从链接的源省略文字This is scrap work.
,我相信你手动键入从编译knitr文档的代码,如PDF和你的错误是由于手动剪切粘贴/打字。我建议你参考原.Rmd文件,这是R降价,可能是目前您的使用视为在HTML / PDF / Word中,而不是原始R源之中。
下面是更正后的代码块应该创建人物: