Я хочу создать вектор из строки фрейма данных. Но мне не нужны имена строк и столбцов. Я пробовал несколько вещей ... но безуспешно.
Это мой фрейм данных:
> df <- data.frame(a=c(1,2,4,2),b=c(2,6,2,1),c=c(2.6,8.2,7.5,3))
> df
a b c
1 1 2 2.6
2 2 6 8.2
3 4 2 7.5
4 2 1 3.0
Я попытался:
> newV <- as.vector(df[1,])
> newV
a b c
1 1 2 2.6
Но мне очень нужно что-то вроде этого:
> newV <- c( 1,2,2.6)
> newV
[1] 1.0 2.0 2.6
c(t(as.matrix(df)))
?Ответы:
Когда вы извлекаете одну строку из фрейма данных, вы получаете однорядный фрейм данных. Преобразуйте его в числовой вектор:
Как предлагает @Roland,
unlist(df[1,])
преобразует однострочный фрейм данных в числовой вектор, не удаляя имена. Следовательно,unname(unlist(df[1,]))
это еще один, немного более явный способ получить тот же результат.Как комментирует @Josh ниже, если у вас есть не полностью числовой (буквенный, факторный, смешанный ...) фрейм данных, вам нужен
as.character(df[1,])
вместо этого.источник
identical(unlist(df[1,], use.names = FALSE), as.numeric(df[1,]))
(и, кстати, df все еще не подходящее имя для data.frame ... ;-))Рекомендую
unlist
, что сохраняет имена.Если вам не нужен именованный вектор:
источник
Если вы не хотите переходить на числовой, вы можете попробовать это.
источник
str(as.vector(t(df)[,1]))
естьnum [1:3] 1 2 2.6
, т.е. ваш код действительно преобразует результаты в числовой вектор ...t(df)
R, переводит фрейм данных в матрицу, в данном случае числовую матрицу, потому что все элементы являются числовыми. Затем[,1]
извлекается первый столбец (числовой вектор, поскольку избыточное измерение автоматически удаляется).as.vector()
просто отбрасывает имена (с которыми вы тоже можете поступитьunname()
).unname(unlist(x))
решение немного лучше (более эффективное и прозрачное).as.vector(t(df)[,1])
Я люблю это ! Именно то, что мне нужно!Вот
dplyr
вариант на основе:источник
Обратите внимание, что вы должны быть осторожны, если ваша строка содержит фактор. Вот пример:
Вот еще один пример (по умолчанию data.frame () преобразует символы в множители)
Чтобы предотвратить такое поведение, вам нужно позаботиться о факторе перед его извлечением:
источник
Столбцы фреймов данных уже являются векторами, их нужно просто вытащить. Обратите внимание, что вы помещаете нужный столбец после запятой, а не перед ней:
Если вам действительно нужна строка, то делайте то, что сказал Бен, и, пожалуйста, используйте слова правильно в будущем.
источник