2016-01-24 16 views
-2

我得子集數據上的人誰完成了調查,變量爲「處置」的R - 「子集的數據」錯誤:「>」沒有意義的因素

> names(df) 
[1] "caseid"  "disposition" "regstate" "pid7" "ideo5" "birthyr"     "gender"  "race"  "educ"  
> summary.default(df) 
     Length Class Mode 
caseid  708 -none- numeric 
disposition 708 factor numeric 
regstate 708 factor numeric 
pid7  708 factor numeric 
ideo5  708 factor numeric 
birthyr  708 -none- numeric 
gender  708 factor numeric 
race  708 factor numeric 
educ  708 factor numeric 

現在我的子集數據:

disposition <- df$disposition 

我可以看到完整的調查是33和708之間

completeSurveys <- disposition[33:708] 

我特里結構來選擇以下方式的數據:

selectData <- complete.cases(df$caseid, df$regstate, df$pid7, df$ideo, df$birthyr, df$gender, df$race, df$educ) 

,並定義當調查完成的數據:

completeSurveysDat <- (selectData & (df$disposition > 32 & df$disposition < 709)) 

不幸的是我有:

Warning messages:
1: In Ops.factor(df$disposition, 32) : ‘>’ not meaningful for factors
2: In Ops.factor(df$disposition, 709) : ‘<’ not meaningful for factors

+0

「性格」是一個因素。如果沒有可重現的例子,任何事情都很難診斷。但是,使列'競爭'(df $ complete < - .......)然後通過'mysubset < - df [df $ complete,]'或類似的子集可能更容易。 – Heroka

+2

你爲什麼選擇'處置[33:708]'?通過這樣做,你可以選擇33到708行,你打算做什麼?此外,就像我上面的評論指出的那樣,「處置」不是一個因素。您可以使用'as.numeric(as.character(處置))'將其更改爲數字。 – ytk

+0

我的任務是指文件「sample.RData」,其中包含一個數據框,「df」有708行和9個變量,用於選擇某些人口統計問題的調查回答。我必須將數據分爲完成調查的人員,變量是「處置」 - 完成。 completeSurveysDat < - (selectData&(df $ disposition =「Complete」))generate:plot.window(...)中的錯誤:需要有限'xlim'值 另外:警告消息: 1:In min(x) :沒有非缺少的參數min;使用dplyr返回Inf –

回答

1

我會建議你使用任何data.table或dplyr包來操縱你的數據庫,這些問題變得更容易。

此外,確實如果您是按因素過濾,則不可能使用數字運算符(或不是全部)。你應該使用as.numeric()函數來解決這個問題。

隨着data.table:

library(data.table) 
df <- as.data.table 
df[as.numeric(disposition)> 33 & as.numeric(disposition)<709] 

隨着dplyr:

library(dplyr) 
df <- as.tbl(df) 
df %>% filter(as.numeric(disposition)> 33,as.numeric(disposition)<709) 

你應該輸入dplyr或data.table獲得更多的信息,但這些包已經被證明是非常有用的?操縱數據庫。

你的輸出基本上意味着過濾後你有0個觀察值,因此as.numeric()不能解決這些因素的問題。有人推薦使用as.numeric(as.character())。我首先要確保我現在有數字值,然後我會使用上面給出的代碼。

希望它可以幫助

+0

我得到了: –

0

所以,你要完成調查,其中針對配置中輸入的值是33和709之間?你可以做你想做多一點簡潔像這樣的內容:

subset(df, complete.cases(caseid, regstate, pid7, ideo, birthyr, gender, 
     race, educ) & 
     as.numeric(as.character(disposition)) > 33 & 
     as.numeric(as.character(disposition)) < 709) 

你還需要「as.character」在那裏,太,否則,你的因素僅僅是按字母順序編號,例如'as.numeric(as.factor(c(1,3,5)))'將是1 2 3

0

當我使用dplyr

> library(dplyr) 
> df <- as.tbl(df) 
> df %>% filter(as.numeric(disposition)> 33,as.numeric(disposition) <709) 
Source: local data frame [0 x 9] 

Variables not shown: caseid (dbl), disposition (fctr), regstate (fctr), pid7 (fctr), ideo5 
(fctr), birthyr (dbl), gender (fctr), race (fctr), educ (fctr) 

當數據。表:

library(data.table) 
df <- as.data.table 
df[as.numeric(disposition) > 33 & as.numeric(disposition) < 709] 

df %>% filter(as.numeric(disposition)> 33,as.numeric(disposition)<709) 
Source: local data frame [0 x 9] 

Variables not shown: caseid (dbl), disposition (fctr), regstate (fctr), pid7 (fctr), ideo5 
(fctr), birthyr (dbl), gender (fctr), race (fctr), educ (fctr) 

我R中新真的不知道如何解釋這個記錄