2011-07-07 20 views
1

我對於我的數據集有相當長的問題,我相信我的問題可以追溯到導入數據。我查看了許多其他問題和答案,以及儘可能多的幫助網站,但我似乎無法完成任何工作。我正試圖在我的數據上運行一些TTests,並且迄今爲止無法這樣做。我相信根本原因是數據被導入爲類NULL。我試圖在此處包含儘可能多的信息,以顯示我正在處理的內容以及我遇到的問題類型(如果問題出現在其他某個區域)導入爲類爲「null」的數據 - 無法執行統計,無法更改類

我的數據概述以及內容我到目前爲止一直在做的是這樣的:

實例文件數據(如讀取從.csv文件數據後顯示在R):

Part Q001 Q002 LA003 Q004 SA005  D106 
1  5  3  text  99  text  3 
2  3    text  2  text  2 
3  2  4    3  text  5 
4  99  5  text  2     2 
5  4  2    1  text  3 

所以在我的數據中,「答案」是從1到5. 99代表已回答的問題N/A。空白代表未解答的問題。 「文本」問題是一個長期的簡短回答/一項調查的評論。所有這些數據都存儲在一個超過150個參與者(部分)的大型數據集中,並且包含300多個問題(根據問題以1-5回答,長答案,簡短答案或人口統計數字標明Q,LA,SA或D) (也數字答案0認爲6左右))。

當我導入數據時,我需要讓它不考慮任何空白或99個答案,以免它們干擾統計數據。我也不關心評論,所以我把它們全部過濾出來。

編輯:數據文件的樣子:

Part,Q001,Q002,LA003,Q004,SA005,D006 
1,5,3,text,99,text,3 
2,3,,text,2,text,2 
etc... 

我現在用的是以下行來讀取數據:

data.all <- read.table("data.csv", header=TRUE, sep=",", na.strings = c("","99")) 
data <- data.all[, !(colnames(data.all) %in% c("LA003", "SA005") 

現在,當我輸入

class(data$Q001) 

我得到NULL

I需要這些是數字。我可以使用摘要(數據)來獲得手段等,但是當我嘗試運行ttests時,出現包括NULL的錯誤。

我試圖把此列到NUMERICS使用

data<-sapply(data,as.numeric) 

,我試圖

data[,1]<-as.numeric(as.character(data[,1])) 

(1和2,而不是,但我真的不明白sapply語法,我看到它在幾個其他答案,並試圖使其工作) 當我然後鍵入

class(data$Q001) 

我得到「錯誤:$操作是原子向量

無效的,如果我不嘗試sapply用,我嘗試運行t檢驗中,我創建的子集,如

data.2<-subset(data, D106 == "2") 
data.3<-subset(data, D106 == "3") 

和我使用

t.test(data.2$Q001~data.3$Q001, na.rm=TRUE) 

,我得到「無效的類型(NULL)爲變量‘data.2 $ Q001’

我使用不同的語法,想看看我是否能得到任何工作試過了,

t.test(data.2$Q001, data.3$Q001, na.rm=TRUE) 

給出 「在is.na(d):類型 'NULL' 的is.na()施加到非(列表或向量)」 和「在mean.default(X):參數不是數字或邏輯:回覆NA」

所以,現在我覺得我一直清楚什麼,我試圖做一些我所試過的東西...

如何導入我的數據,以便數字(特別是具有以Q開頭的列中的任何數字)被準確讀爲數字,並且不會獲得應用於它們的NULL類?爲了正確導入我的數據以運行TTests,我需要做些什麼?我在過去使用了大量的TTests,但它一直都是我在Excel中手動錄製的數據(因此只有一列數字沒有空格或NAs),我從來沒有遇到過問題,而且我只是不明白這個數據集是什麼,我不能讓它工作。任何正確的方向援助非常感謝!

+2

你真的在使用'sep =「,」',而且你的數據文件真的不是用逗號分隔嗎?上面的語法有點損壞,但是從你顯示的內容看來,你似乎正在試圖用指定的逗號分隔符來讀取空格分隔的數據......'str(data.all)'的結果是什麼...... ??? –

+1

對不起,我在我的例子中用空格分隔,以便讀取更容易。在R中輸入「data」時,這就是我的數據的外觀。原始文件是Part,Q001,Q002,LA003,Q004,SA005,D006。我會編輯以清楚說明。獲取數據不是問題,導入的類似乎是問題... – Aibhilin

+1

我們仍然需要查看'str(data.all)'和'str(data)'的輸出到能夠得到任何地方... –

回答

2

這個工作對我來說:

> z <- read.table(textConnection("Part,Q001,Q002,LA003,Q004,SA005,D006 
+ 1,5,3,text,99,text,3 
+ 2,3,,text,2,text,2 
+ "),header=TRUE,sep=",",na.strings=c("","99")) 
> str(z) 
'data.frame': 2 obs. of 7 variables: 
$ Part : int 1 2 
$ Q001 : int 5 3 
$ Q002 : int 3 NA 
$ LA003: Factor w/ 1 level "text": 1 1 
$ Q004 : int NA 2 
$ SA005: Factor w/ 1 level "text": 1 1 
$ D006 : int 3 2 
> z2 <- z[,!(colnames(z) %in% c("LA003","SA005"))] 
> str(z2) 
'data.frame': 2 obs. of 5 variables: 
$ Part: int 1 2 
$ Q001: int 5 3 
$ Q002: int 3 NA 
$ Q004: int NA 2 
$ D006: int 3 2 
> z2$Q001 
[1] 5 3 
> class(z2$Q001) 
[1] "integer" 

唯一我能想到的是,你的第二個命令(這是缺少一些終止括號和括號內)沒有在所有的工作,你錯過的錯誤訊息,並且您指的是某些先前定義的data對象,該對象沒有定義相同的列。例如,class(z$QQQ)NULL,遵循上述示例。

編輯:看起來原來的問題是標題中的一些奇怪/垃圾字符,它們混淆了第一列的名稱。手動重命名該列(names(data)[1] <- "Q001")似乎解決了問題。

+0

你的代碼給了我'z $ Q001> logical(0)'但是,我的代碼在讀入後直接給出'data.all $ Q001> NULL'我的代碼與其他代碼不同我正在從文本文件data.csv中讀取,而不是使用textConnection。我沒有運行我的第二行代碼來過濾LA/SA列,並且Q列仍然給出NULL – Aibhilin

+0

這解決了該列的問題,但不幸的是,在我的大數據集中,至少有一半列導入爲NULL 。所以,雖然重命名該列似乎工作,但現在必須完成超過200列的數據......大約一半的數據使用'class(data $ Q001)'格式導入爲Null,而所有數據都適用於使用'class(data [[1]])'。所以解決方案的工作原理是逐個修復每一列,但並沒有解決原先爲什麼這些列首先被指定爲NULL的問題。列1導入了垃圾字符... – Aibhilin

+0

但是'str()'不會顯示我的完整列表(在100之後截斷),所以我看不到前面有些隨機字符。我唯一的聯繫是文本答案列後的列已經變爲空(儘管這並不能解釋爲什麼第一列會出現這個問題),但是我沒有能夠檢查每一行,因爲已經結束了其中500人。因此,雖然看起來這些值是正確的,並且註冊爲整數,但我不知道爲什麼這些列首先被分配爲NULL,而修復工作重新分配名稱時,它修復了,它不能解決。 – Aibhilin