данные, импортированные как класс "null" - невозможно выполнить статистику, невозможно изменить класс - PullRequest
1 голос
/ 07 июля 2011

У меня довольно длительные проблемы с набором данных, и я считаю, что мои проблемы связаны с импортом данных.Я просмотрел много других вопросов и ответов, а также множество справочных сайтов, которые только смог найти, но, похоже, я не могу заставить что-либо работать.Я пытаюсь выполнить некоторые тесты TT для своих данных и до сих пор не смог этого сделать.Я считаю, что основной причиной является то, что данные импортируются как класс NULL.Я попытался включить здесь как можно больше информации, чтобы показать, с чем я работаю, и типы проблем, с которыми я сталкиваюсь (если проблема в какой-то другой области)

Обзор моих данныхи то, что я делал до сих пор, это:

Данные файла примера (как показано в R после чтения данных из файла .csv):

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 вопросов (помеченные Q, LA, SA или D, основанные на вопросе с 1-5 ответами, длинным ответом, коротким ответом или демографическим описанием).(также числовые ответы 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

Мне нужно, чтобы они были числовыми.Я могу использовать сводку (данные), чтобы получить средства и тому подобное, но когда я пытаюсь запустить тесты, у меня появляются ошибки, в том числе NULL.

Я пытался превратить этот столбец в цифры, используя

data<-sapply(data,as.numeric)

и я попытался

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

(и с 2 вместо 1, но я не очень понимаю синтаксис Саппли, я видел его в нескольких других ответах и ​​пытался заставить его работать), когдаЗатем я набираю

class(data$Q001)

Я получаю «Ошибка: оператор $ недопустим для атомарных векторов

Если я не пытаюсь использовать sapply и пытаюсь запустить ttest, ясозданные подмножества, такие как

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 '

Iпопытался использовать другой синтаксис, пытаясь выяснить, могу ли я заставить что-либо работать, и

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

выдает «In is.na (d): is.na () применяется к не- (список или вектор»)) типа 'NULL' "и« In mean.default (x): аргумент не является числовым или логическим: возвращает NA »

Итак, теперь, когда я думаю, что я ясно понял, что пытаюсьчтобы сделать и некоторые из вещей, которые я пытался ...

Как я могу импортировать мои данные, чтобы числа (в частности, любое число в столбце с заголовком, начинающимся с Q) были точно прочитаны как числа и сделатьне получить к ним пустой класс?Что мне нужно сделать, чтобы правильно импортировать мои данные для запуска на них TTests?В прошлом я использовал TTests для большого количества данных, но это всегда были данные, которые я записывал вручную в Excel (и поэтому имел только один столбец чисел без пробелов или NA), и у меня никогда не было проблем, и япросто не понимаю, что это за набор данных, что я не могу заставить его работать.Любая помощь в правильном направлении очень ценится!

1 Ответ

2 голосов
/ 08 июля 2011

Это работает для меня:

> 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 в соответствии с приведенным выше примером.

edit : похоже, что исходная проблема заключалась в том, что в заголовке были странные / ненужные символы, которые испортили имяпервый столбец.Переименование столбца вручную (names(data)[1] <- "Q001"), похоже, решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...