programing

데이터 프레임의 행을 벡터로 변환

sourcejob 2023. 7. 8. 10:50
반응형

데이터 프레임의 행을 벡터로 변환

데이터 프레임의 행에서 벡터를 만들고 싶습니다.하지만 행 이름과 열 이름은 원하지 않습니다.몇 가지 시도를 해봤는데,하지만 운이 없었습니다.

다음은 제 데이터 프레임입니다.

> 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

데이터 프레임에서 단일 행을 추출하면 단일 행 데이터 프레임이 생성됩니다.숫자 벡터로 변환합니다.

as.numeric(df[1,])

@Roland가 제안하는 것처럼,unlist(df[1,])이름을 삭제하지 않고 1행 데이터 프레임을 숫자 벡터로 변환합니다.그러므로unname(unlist(df[1,]))같은 결과를 얻을 수 있는 또 다른 방법입니다.

@Josh가 아래에 설명한 것처럼 완전하지 않은 숫자(알파벳, 인자, 혼합...) 데이터 프레임이 있는 경우 다음이 필요합니다.as.character(df[1,])대신.

추천합니다unlist그 이름들을 간직하고 있습니다.

unlist(df[1,])
  a   b   c 
1.0 2.0 2.6 

is.vector(unlist(df[1,]))
[1] TRUE

명명된 벡터를 원하지 않는 경우:

unname(unlist(df[1,]))
[1] 1.0 2.0 2.6

여기 있습니다.dplyr기준 옵션:

newV = df %>% slice(1) %>% unlist(use.names = FALSE)

# or slightly different:
newV = df %>% slice(1) %>% unlist() %>% unname()

숫자로 변경하지 않으려면 이 방법을 사용해 보십시오.

> as.vector(t(df)[,1])
[1] 1.0 2.0 2.6

행에 요인이 포함된 경우 주의해야 합니다.다음은 예입니다.

df_1 = data.frame(V1 = factor(11:15),
                  V2 = 21:25)
df_1[1,] %>% as.numeric() # you expect 11 21 but it returns 
[1] 1 21

다음은 다른 예입니다(기본적으로 data.frame()이 문자를 요인으로 변환).

df_2 = data.frame(V1 = letters[1:5],
                  V2 = 1:5)
df_2[3,] %>% as.numeric() # you expect to obtain c 3 but it returns
[1] 3 3
df_2[3,] %>% as.character() # this won't work neither
[1] "3" "3"

이 동작을 방지하려면 인자를 추출하기 전에 먼저 처리해야 합니다.

df_1$V1 = df_1$V1 %>% as.character() %>% as.numeric()
df_2$V1 = df_2$V1 %>% as.character()
df_1[1,] %>% as.numeric()
[1] 11  21
df_2[3,] %>% as.character()
[1] "c" "3"

데이터 프레임의 열은 이미 벡터이므로 데이터 프레임을 끌어내기만 하면 됩니다.원하는 열은 쉼표 앞이 아니라 쉼표 뒤에 배치합니다.

> newV <- df[,1]
> newV
[1] 1 2 4 2

만약 당신이 실제로 행을 원한다면, 벤이 말한 대로 하고, 앞으로 단어를 올바르게 사용하세요.

언급URL : https://stackoverflow.com/questions/14484728/convert-a-row-of-a-data-frame-to-vector

반응형