library(ltm)
library(mokken)
data("LSAT")
df_aisp<-aisp(LSAT,search='normal')
df_aisp<-as.data.frame(df_aisp)
#subset if df_aisp$0.3==1
subset(df_aisp,0.3==1)
上述R脚本的输出为:
[1] 0.3
<0 rows> (or 0-length row.names)
实际上,df_aisp是:
0.3
Item 1 1
Item 2 0
Item 3 1
Item 4 0
Item 5 0
这意味着subset
给我错误的结果。
如何解决这个问题?
答案 0 :(得分:3)
我们可以对非标准格式的列名使用反引号(按原样对其进行评估)。按照标准格式,名称以数字开头。
subset(df_aisp,`0.3`==1)
此外,我们可以指定用[[
或[
引用的列名称进行子设置
df_aisp[df_aisp[,"0.3"] ==1, , drop = FALSE]
但是,我们可以使用make.names
来使名称成为标准名称,这将为列名添加前缀X
names(df_aisp) <- make.names(names(df_aisp))
names(df_aisp)
#[1] "X0.3"
然后,我们不需要反引号
subset(df_aisp, X0.3 == 1)
# X0.3
#Item 1 1
#Item 3 1