[r] data.frame 열을 벡터로 변환 하시겠습니까?

다음과 같은 데이터 프레임이 있습니다.

a1 = c(1, 2, 3, 4, 5)
a2 = c(6, 7, 8, 9, 10)
a3 = c(11, 12, 13, 14, 15)
aframe = data.frame(a1, a2, a3)

열 중 하나를 벡터로 변환하기 위해 다음을 시도했지만 작동하지 않습니다.

avector <- as.vector(aframe['a2'])
class(avector)
[1] "data.frame"

이것이 내가 취할 수있는 유일한 해결책이지만, 이것을 수행하는 더 좋은 방법이 있어야한다고 가정합니다.

class(aframe['a2'])
[1] "data.frame"
avector = c()
for(atmp in aframe['a2']) { avector <- atmp }
class(avector)
[1] "numeric"

참고 : 위의 어휘가 꺼져있을 수 있으므로 수정하십시오. 나는 여전히 R의 세계를 배우고 있습니다. 또한, 여기서 무슨 일이 일어나고 있는지에 대한 설명은 높이 평가됩니다 (즉, 파이썬이나 다른 언어와 관련이 있으면 도움이 될 것입니다!)



답변

나는 실수를하지 않고 이것을 설명하려고 노력할 것이지만, 나는 이것이 의견에서 명확하게 하나 또는 두 개를 끌 것이라고 내기 할 것입니다.

데이터 프레임은 목록입니다. 열의 이름을 사용하여 데이터 프레임을 서브 세트 할 때 및을 [얻는 것은 서브 리스트 (또는 서브 데이터 프레임)입니다. 실제 원자 열을 원한다면 하위 목록이 아닌 벡터를 반환하는 [[을 사용할 수 aframe[,2]있습니다.

따라서이 시퀀스를 실행하면 상황이 더 명확해질 수 있습니다.

avector <- as.vector(aframe['a2'])
class(avector)

avector <- aframe[['a2']]
class(avector)

avector <- aframe[,2]
class(avector)


답변

를 사용하여이 작업을 수행하는 쉬운 방법이 dplyr있습니다.

dplyr::pull(aframe, a2)


답변

$추출을 사용할 수 있습니다 .

class(aframe$a1)
[1] "numeric"

또는 이중 대괄호 :

class(aframe[["a1"]])
[1] "numeric"


답변

필요하지는 않지만 as.vector()올바른 색인 생성이 필요합니다.avector <- aframe[ , "a2"]

알아야 할 또 다른 사항은 다음과 같은 drop=FALSE옵션입니다 [.

R> aframe <- data.frame(a1=c1:5, a2=6:10, a3=11:15)
R> aframe
  a1 a2 a3
1  1  6 11
2  2  7 12
3  3  8 13
4  4  9 14
5  5 10 15
R> avector <- aframe[, "a2"]
R> avector
[1]  6  7  8  9 10
R> avector <- aframe[, "a2", drop=FALSE]
R> avector
  a2
1  6
2  7
3  8
4  9
5 10
R> 


답변

‘[[‘연산자를 사용하는 또 다른 장점은 data.frame 및 data.table과 함께 작동한다는 것입니다. 따라서 data.frame과 data.table 모두에 대해 함수를 실행해야하고 열을 벡터로 추출하려는 경우

data[["column_name"]] 

최고 다.


답변

이런 식으로 시도해 볼 수 있습니다.

as.vector(unlist(aframe$a2))


답변

추출 연산자를 사용하면 작동합니다. 기본적으로 []는 drop=TRUE여기서 원하는 옵션 인 옵션을 설정합니다 . 자세한 내용 ?'['은 참조하십시오.

>  a1 = c(1, 2, 3, 4, 5)
>  a2 = c(6, 7, 8, 9, 10)
>  a3 = c(11, 12, 13, 14, 15)
>  aframe = data.frame(a1, a2, a3)
> aframe[,'a2']
[1]  6  7  8  9 10
> class(aframe[,'a2'])
[1] "numeric"