Получение строки из фрейма данных как вектора в R

Я знаю, что для получения строки из фрейма 9X_rstats данных в R мы можем сделать следующее:

data[row,] 

, где 9X_rstats строка - целое число. Но это дает уродливую 9X_r-language структуру данных, где каждый столбец помечен 9X_r-language именами столбцов. Как я могу просто получить 9X_rstats строку в виде списка значений?

38
0
5
Общее количество ответов: 5

Ответ #1

Ответ на вопрос: Получение строки из фрейма данных как вектора в R

Данные Data.frames, созданные путем импорта 9X_r данных из внешнего источника, по умолчанию 9X_rstats преобразуются в факторы. Если вы не хотите, чтобы 9X_base-r этот набор был stringsAsFactors=FALSE

В этом случае, чтобы извлечь 9X_rstats строку или столбец как вектор, вам нужно 9X_r-language сделать что-то вроде этого:

as.numeric(as.vector(DF[1,])) 

или как это

as.character(as.vector(DF[1,])) 

47
3

  • as.vector не нужен, as.numeric (DF [1,]) и as.character (DF [1,]) работают одинаково.<p><span ...

Ответ #2

Ответ на вопрос: Получение строки из фрейма данных как вектора в R

Вы не можете получить его как vector, потому что 9X_rstats каждый столбец может иметь свой режим. У 9X_rstats вас могут быть numeric в одном столбце и character в следующем.

Если 9X_base-r вы знаете режим всей строки или можете преобразовать 9X_r в тот же тип, вы можете использовать функцию 9X_base-r преобразования режима (например, as.numeric()) для преобразования 9X_r в вектор. Например:

> state.x77[1,] Population Income Illiteracy Life Exp Murder HS Grad Frost 3615.00 3624.00 2.10 69.05 15.10 41.30 20.00 Area 50708.00 > as.numeric(state.x77[1,]) [1] 3615.00 3624.00 2.10 69.05 15.10 41.30 20.00 50708.00 

Это будет работать, даже 9X_base-r если некоторые из столбцов будут integer, хотя 9X_r они будут преобразованы в числа с плавающей 9X_r запятой numeric.

14
0

Ответ #3

Ответ на вопрос: Получение строки из фрейма данных как вектора в R

Есть проблема с тем, что вы предлагаете; а 9X_r-language именно, что компоненты фреймов данных (то, что 9X_base-r вы называете столбцами) могут иметь разные 9X_r-language типы данных. Если вы хотите использовать 9X_rstats одну строку в качестве вектора, она должна 9X_r содержать только один тип данных - это атомарные 9X_rstats векторы!

Вот пример:

> set.seed(2) > dat <- data.frame(A = 1:10, B = sample(LETTERS[1:4], 10, replace = TRUE)) > dat A B 1 1 A 2 2 C 3 3 C 4 4 A 5 5 D 6 6 D 7 7 A 8 8 D 9 9 B 10 10 C > dat[1, ] A B 1 1 A 

Если мы заставим его 9X_base-r отбросить пустой (столбец), единственным 9X_rstats выходом для R будет преобразование строки 9X_base-r в список для сохранения различных типов 9X_rstats данных.

> dat[1, , drop = TRUE] $A [1] 1 $B [1] A Levels: A B C D 

Единственное логическое решение этой 9X_r-language проблемы - привести фрейм данных к общему 9X_r-language типу путем приведения его к матрице. Это 9X_base-r делается с помощью data.matrix(), например:

> mat <- data.matrix(dat) > mat[1,] A B 1 1 

data.matrix() преобразует 9X_base-r множители в их внутренние числовые коды. Вышеупомянутое 9X_r позволяет извлечь первую строку как вектор.

Однако, если 9X_r у вас есть символьные данные во фрейме данных, единственным 9X_r выходом будет создание символьной матрицы, которая 9X_base-r может оказаться полезной или бесполезной, а 9X_rstats data.matrix() теперь нельзя использовать, нам нужен as.matrix() вместо 9X_r этого:

> dat$String <- LETTERS[1:10] > str(dat) 'data.frame': 10 obs. of 3 variables: $ A : int 1 2 3 4 5 6 7 8 9 10 $ B : Factor w/ 4 levels "A","B","C","D": 1 3 3 1 4 4 1 4 2 3 $ String: chr "A" "B" "C" "D" ... > mat <- data.matrix(dat) Warning message: NAs introduced by coercion > mat A B String [1,] 1 1 NA [2,] 2 3 NA [3,] 3 3 NA [4,] 4 1 NA [5,] 5 4 NA [6,] 6 4 NA [7,] 7 1 NA [8,] 8 4 NA [9,] 9 2 NA [10,] 10 3 NA > mat <- as.matrix(dat) > mat A B String [1,] " 1" "A" "A" [2,] " 2" "C" "B" [3,] " 3" "C" "C" [4,] " 4" "A" "D" [5,] " 5" "D" "E" [6,] " 6" "D" "F" [7,] " 7" "A" "G" [8,] " 8" "D" "H" [9,] " 9" "B" "I" [10,] "10" "C" "J" > mat[1, ] A B String " 1" "A" "A" > class(mat[1, ]) [1] "character" 

8
0

Ответ #4

Ответ на вопрос: Получение строки из фрейма данных как вектора в R

Как насчет этого?

library(tidyverse) dat <- as_tibble(iris) pulled_row <- dat %>% slice(3) %>% flatten_chr() 

Если вы знаете, что все 9X_r значения одного типа, используйте flatten_xxx.

В противном 9X_r случае, я считаю, что flatten_chr() безопаснее.

3
0

Ответ #5

Ответ на вопрос: Получение строки из фрейма данных как вектора в R

Как отмечает пользователь «Reinstate Monica», эта 9X_r проблема состоит из двух частей:

  1. Фрейм данных часто содержит разные типы данных в каждом столбце, которые необходимо преобразовать в символьные строки.
  2. Даже после приведения столбцов к символьному формату "оболочка" data.frame должна быть удалена, чтобы создать вектор с помощью такой команды, как unlist.

С помощью 9X_rstats комбинации dplyr и базы R это можно сделать в 9X_rstats две строки. Во-первых, mutate_all преобразует все 9X_base-r столбцы в символьный формат. Во-вторых, команды 9X_r unlist извлекают вектор из структуры data.frame.

Моя 9X_r особая проблема заключалась в том, что вторая 9X_rstats строка csv включала фактические имена столбцов. Итак, я 9X_r-language хотел извлечь вторую строку в вектор и использовать 9X_r-language ее для присвоения имен столбцов. Следующие 9X_rstats действия помогли извлечь строку как вектор 9X_rstats символов:

library(dplyr) data_col_names <- data[2, ] %>% mutate_all(as.character) %>% unlist(., use.names=FALSE) # example of using extracted row to rename cols names(data) <- data_col_names # only for this example, you'd want to remove row 2 # data <- data[-2, ] 

(Примечание: использование as.character() вместо 9X_r-language unlist тоже будет работать, но применение as.character дважды 9X_rstats менее интуитивно.)

1
0