设置和清理数据框时出错R

时间:2016-09-11 01:03:56

标签: r

我正在尝试生成样本预测,并在运行以下代码Error: variable 'dummygen' was fitted with type "numeric" but type "factor" was supplied后收到此消息。

我检查了str以验证我使用的两个变量都是数字的,它们似乎是。我在这里做了一堆狩猎,认为this可能有点相关,但我还没有能够得到建议。

这是我到目前为止的代码。

library(foreign)
library(plyr)
library(rvest)
library(stringi)
library(purrr)
library(XLConnect)
library(splitstackshape)
library(tidyr)
library(dplyr)

donner_raw <- read.csv("donner.txt", sep="\t", header = FALSE) 
colnames(donner_raw) <- c("age_gen", "survive")

donner_raw <- separate(donner_raw, age_gen, into = c("age", "gender"), "(?<=\\d)(?=[A-Za-z])")

logit <- glm(survive ~ age + dummygen,family=binomial(link='logit'),data=donner_raw)

newlogit <- data.frame(age=seq(1,6, length=20), dummygen=("0"))
ooslogit <- predict.glm(logit, newlogit, se.fit=TRUE)

我不知道在我做了什么的过程中我搞砸了。这是数据的可重现部分。

dput(droplevels(head(donner_raw)))
structure(list(age = structure(c(6L, 4L, 5L, 3L, 2L, 1L), .Label = c("13", "3", "4", "45", "6", "60"), class = "factor"), gender = c("M", "F", "F", "F", "F", "F"), dummygen = structure(c(2L, 1L, 1L, 1L, 1L, 1L), .Label = c("0", "1"), class = "factor")), .Names = c("age", "gender", "survive", "dummygen"), row.names = c(NA, 6L), class = "data.frame")

1 个答案:

答案 0 :(得分:0)

让我们简单地阅读并思考错误信息:

  

错误:变量'dummygen'的类型为“numeric”,但提供了“factor”类型

在行之后发生此错误:

ooslogit <- predict.glm(logit, newlogit, se.fit=TRUE)

(据推测,至少,因为你的问题不是很明确,并提供了许多似乎没有相关的代码。)

所以R告诉你,当模型 fit 时,变量dummygen是数字,但现在你给它一个因子。

让我们看看:

str(newlogit)
'data.frame':   20 obs. of  2 variables:
 $ age     : num  1 1.26 1.53 1.79 2.05 ...
 $ dummygen: Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...

是的!

所以你的问题是你通过指定:

莫名其妙地创建了数据框newlogit
newlogit <- data.frame(age=seq(1,6, length=20), dummygen=("0"))

明确指定变量dummygen不是数字。只需将其转换回来,或首先删除引号。例如:

newlogit <- data.frame(age=seq(1,6, length=20), dummygen= 0)

newlogit$dummygen <- as.numeric(newlogit$dummygen)