다음과 같은 데이터 프레임이 있습니다.
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"