r - 当我运行代码块时,一切正常,但是当我尝试编织时出现错误
问题描述
就像标题说的那样,当我在 R markdown 文件中运行代码时,一切正常,我没有收到任何错误,但是当我尝试 Knit 时出现错误。
这是它说第一个错误发生的代码块(这个失败显然会导致一整串其他错误,因为没有创建 dta1)。
dta1 <- df %>%
group_by(z_assignment) %>%
summarise(Arrest = count(t_final == 1),
Advise = count(t_final == 2),
Separate = count(t_final == 3),
Total = sum(Arrest, Advise, Separate)) %>%
arrange(Separate) %>%
bind_rows(summarise_all(., funs(if(is.numeric(.)) sum(.) else "Total")))
我得到的错误是这个
## Error: Problem with `summarise()` input `Arrest`.
## x no applicable method for 'group_vars' applied to an object of class "logical"
## i Input `Arrest` is `count(t_final == 1)`.
## i The error occurred in group 1: z_assignment = "advise".
这些是我正在使用的库(我的设置块中有它们)
library(tidyverse)
library(AER)
library(stargazer)
library(haven)
library(lfe)
library(estimatr)
library(stringr)
library(dplyr)
library(modelsummary)
library(ggplot2)
library(haven)
这是我正在使用的数据(这是导致错误的唯一代码块)
df <- read_dta("http://masteringmetrics.com/wp-content/uploads/2015/02/mdve.dta")
df <- df %>%
rename_all(tolower) %>%
mutate(z_assignment = case_when(
t_random == 1 ~ "arrest",
t_random == 2 ~ "advise",
t_random == 3 ~ "separate"
),
d_actual = case_when(
t_final == 1 ~ "arrest",
t_final == 2 ~ "advise",
t_final == 3 ~ "separate",
t_final == 4 ~ "other"
),
z_coddled = ifelse(z_assignment %in% c("separate", "advise"),1,0),
d_coddled = ifelse(d_actual %in% c("separate", "advise"),1,0)
) %>%
filter(d_actual != "other")
df <- df %>%
mutate( pz_separ=1/(1+exp(1.21)),
pz_arrest=1/(1+exp(1.21+.9)),
pz_advise=1/(1+exp(1.21+.21)),
pd_separ=1/(1+exp(1.05)),
pd_arrest=1/(1+exp(1.05+.82)),
pd_advise=1/(1+exp(1.05+.46)),
order = row_number()/n()) %>%
group_by(t_random) %>%
mutate(z_rank = row_number()/n()) %>%
ungroup() %>%
mutate(Y = ifelse( (z_assignment == "arrest" & z_rank < pz_arrest) |
(z_assignment == "advise" & z_rank < pz_advise) |
(z_assignment == "separate" & z_rank < pz_separ), 1,0)) %>%
select(t_random, z_assignment, t_final, d_actual, z_coddled, d_coddled, Y, v_race, s_race, weapon, s_chem, year, month)
那么我做错了什么/错过了什么?
解决方案
问题在于count
期望 atibble/data.frame
作为输入而不是列/向量。它应该是sum
library(dplyr)
df %>%
group_by(z_assignment) %>%
summarise(Arrest = sum(t_final == 1),
Advise = sum(t_final == 2),
Separate = sum(t_final == 3),
Total = sum(Arrest, Advise, Separate)) %>%
arrange(Separate) %>%
bind_rows(summarise_all(., funs(if(is.numeric(.)) sum(.) else "Total")))
-输出
# A tibble: 4 x 5
# z_assignment Arrest Advise Separate Total
# <chr> <int> <int> <int> <int>
#1 arrest 91 0 1 92
#2 advise 19 84 5 108
#3 separate 26 5 83 114
#4 Total 136 89 89 314
推荐阅读
- excel - INDEX MATCH 有 2 个条件,匹配部分文本
- ios - 更新终端后 Pod init 无法正常工作(一些弹出窗口变为 ZSH)
- ios - 如何修复 iOS 上 Ironsource Unity SDK 中的错误
- python - 每次我需要在 Lambda 中使用它时,如何避免打包请求?
- angular - 验证不会传播到 Angular 中的自定义表单控件 ng-select
- objective-c - 对具有不可变参数且没有初始化程序的方法进行单元测试的最佳方法是什么?
- polymer - 为什么 Webcomponent 对象的值在同一个 webcomponent 的不同实例之间共享?
- macos - 如何在 Mac 上调试访问相机的应用程序?
- python - requestsession 在 Django 中无法将 html 表单变量传递给另一个函数
- ios - 在 Mac Catalyst 项目中未调用 IBAction