В настоящее время у меня есть большой фрейм данных, в котором мне не обязательно знать имена всех строк, которые хранятся в виде строк в первом столбце (в данном случае названия стран, для которых предоставлены некоторые данные). Мне нужно получить эти данные для других дел, и я просто знаю, что первые 56 строк имеют все имена, которые мне нужны, точно по одному разу.

Я подумал, что могу просто создать вектор этих имен, повторяющийся с помощью цикла for, например:

dat=read.csv("foo.csv",header=TRUE)
Names=character(56)
for (i in 1:56){Names[i]=dat[[i,1]]}

Но случается так, что я получаю кучу целых чисел в именах. Когда я запускаю str(dat$NAMES) [интересующий меня столбец], я получаю следующее:

Factor with 56 levels "Angola", "Benin",...: 1 3 4 5 15 27 32 33 39 40 ...

Кажется, это целые числа, которые я получаю, но я не могу понять, как получить вместо них строки.

0
Peace Blaster 22 Сен 2018 в 10:35

1 ответ

Лучший ответ

Проблема в первую очередь заключалась в том, что read.csv произвел множитель в первом столбце, когда OP считал, что это вектор символов.

Этого можно избежать при загрузке данных в R, установив stringsAsFactors = FALSE в read.csv.

dat <- read.csv("foo.csv", header = TRUE, stringsAsFactors = FALSE)
#extract the first 56 entries from the first column
Names <- dat[1:56, 1]

Если stringsAsFactors = FALSE не является вариантом, тогда используйте as.character, чтобы преобразовать этот вектор в символ типа.

dat <- read.csv("foo.csv", header = TRUE, stringsAsFactors = TRUE)
#extract the first 56 entries from the first column
Names <- as.character(dat[1:56, 1])
0
markus 22 Сен 2018 в 08:22