Набор данных сбивает меня с толку - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь манипулировать следующим набором данных (из статистики преступлений ФБР) https://www.ucrdatatool.gov/Search/Crime/Local/RunCrimeJurisbyJuris.cfm. Это в формате .CSV. После загрузки, используя R, я использовал следующие команды

a=read.csv("RunCrimeJurisbyJuris.csv",header=FALSE);

Затем мы удаляем материал сверху и н / д в конце.

b=a[-c(1:5),-c(24,25)];

Что, если смотреть, выглядит правильно. Например, b [1,] создает список первой строки, как и должно быть. Однако, когда я пытаюсь назвать заголовки, например,

 names(b)=b[1,], 

Производит то, что Я ДУМАЮ это список уровней. Почему он это делает?

У меня происходят очень запутанные вещи. Я думаю, это связано с тем, что когда я смотрю, например, на b [1,1], вместо того, чтобы просто получить «Год», я получаю

Year
41 Levels: ...

Кроме того, использование представления (b) создает представление, подобное Excel, которое выглядит как обычный набор данных. Прошло некоторое время с тех пор, как я использовал R, и если я правильно помню, я никогда не видел такого поведения раньше. Кроме того, я думаю, что эти «Уровни» являются источником ошибки. Что я делаю не так?

ВЫШЕ РЕШЕНО

Теперь, когда я вытягиваю членов, скажем, b ["Population"], каждый элемент выглядит следующим образом (число) "". Есть ли способ удалить эти "", и если я потяну конкретное число, скажем, b [3,2], оно будет иметь форму "число". Этот набор данных очень расстраивает (:.

1 Ответ

0 голосов
/ 21 марта 2019

Решение включает в себя следующее:

Во-первых, чтобы убрать часть «уровни», нам не нужно делать строки как факторы. Следовательно, мы добавляем следующую команду:

read.csv("file.csv",header=FALSE,stringsAsFactors=FALSE)

Тогда у нас есть проблема, что все - строки, даже числа (по крайней мере, я). Я исправил это, используя следующий цикл, и sapply()

for(i in 1:ncol(test2)){test2[,i]=sapply(test2[,i],as.numeric)};

Использование as.numeric для преобразования строк в числа. Затем мы можем заменить NA, используя цикл, полученный из Замена отсутствующих значений на среднее значение столбца , что повлияет только на проверку, скажем, статистической значимости или получения доверительных интервалов. Это цикл, описанный в этом вопросе, его довольно легко понять:

for(i in 1:ncol(test2)){ test2[is.na(test2[,i]),i]=mean(test2[,i],na.rm=TRUE)};

И мы закончили!

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