【发布时间】:2016-12-07 12:09:00
【问题描述】:
我正在为贝叶斯分析复制一个 R 代码,但我遇到了这个错误,我试图解决它,还在这里阅读了其他问题,但它仍然不起作用。 我使用相同的数据集和相同的变量(来自 OECD)。谁能告诉我为什么它不起作用? 我的代码是这样的:
rm(list=ls())
# Name of variables to be extracted
v.resp=c("pv1math") # Response Variable
v.treat=c("IC02Q01","IC02Q02","IC02Q03") # Treatment variable(s)
# Student Confoundings
v.student.conf=c("Age", "Gender", "isced_0", "IMMIG", "HEDRES", "WEALTH", "ESCS","FAMSTRUC","hisced","hisei","HOMEPOS", "TIMEINT")
# School Confoundings
v.school.conf=c("CLSIZE","SCMATEDU","STRATIO","SMRATIO","PublicPrivate")
## LOAD DATA
dat <- read.dta("name.dta")
## Weighted sample with weights in the w vector
w=dat$W_FSTUWT
R 中的子集数据
dat=dat[c(v.resp,v.treat,v.student.conf,v.school.conf)]
names(dat)[names(dat)==v.resp]="y"
w=w[complete.cases(dat)]
w=w/sum(w)
nw=function(w) w/sum(w)
dat=dat[complete.cases(dat),]
dim(dat)
当我跑线时
dat=dat[c(v.resp,v.treat,v.student.conf,v.school.conf)]我得到了错误
[.data.frame(dat, c(v.resp, v.treat, v.student.conf, v.school.conf)) 中的错误:选择了未定义的列
我有 25000 个观察值和 900 个变量,但我想用 21 个变量和与它们相关的观察值对我的数据进行子集化(肯定少于 25000 个)。我在 )] 之间放了逗号,但什么也没有,运行其他行我会丢失所有数据。
我也从“Quick-R 网站”运行此代码,但再次出现相同的错误消息
# select variables v1, v2, v3
myvars <- c("v1", "v2", "v3")
newdata <- mydata[myvars]
我想了解它为什么不起作用。我正在从将它们用于同一数据集的论文中复制并粘贴这些代码。 谢谢。
【问题讨论】:
-
你能运行
any(c(v.resp,v.treat,v.student.conf,v.school.conf) %in% names(dat))吗?如果它返回 FALSE,则数据框中不存在列名。也许read.dta根本没有正确传输列名 -
谢谢!我试过了,我没有那个错误消息,观察结果比以前少,但我应该有 21 个变量(我想保留的变量)时仍然有 900 个变量