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의 세계를 배우고 있습니다.또한 여기서 무슨 일이 일어나고 있는지 설명해 주시면 감사하겠습니다(예: Python 또는 다른 언어와 관련하여 도움이 될 것입니다!).
저는 실수 없이 이것을 설명하려고 노력할 것이지만, 이것이 댓글에서 한두 개의 해명을 끌어낼 것이라고 장담합니다.
데이터 프레임은 목록입니다.열 이름을 사용하여 데이터 프레임의 부분 집합을 지정하는 경우[
하위 목록(또는 하위 데이터 프레임)이 제공됩니다.실제 원자 열을 원한다면 다음을 사용할 수 있습니다.[[
아니면 다소 혼란스럽게 (나에게) 할 수 있습니다.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>
이런 걸 시도할 수 있어요
as.vector(unlist(aframe$a2))
'[] 연산자를 사용할 때의 또 다른 장점은 data.frame과 data.table 모두에서 작동한다는 것입니다.따라서 함수를 data.frame과 data.table 모두에 대해 실행해야 하고 벡터로 열을 추출하려면
data[["column_name"]]
최고입니다.
as.vector(unlist(aframe['a2']))
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'])
avector<-unlist(avector)
#this will return a vector of type "integer"
추출 연산자만 사용하면 작동합니다.기본적으로 []는 옵션을 설정합니다.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"
목록을 사용하여 데이터 프레임에 %in%a 목록의 값이 있는지 여부를 기준으로 필터링합니다.
1열 데이터 프레임을 Excel로 내보내고 각 요소 주위에 ""를 추가한 다음 R: 목록 <-c("el1", "el2", ...)에 붙여넣어 목록을 수동으로 만들었습니다. 그 다음에는 대개 FilteredData <-subset(Data, Column %in % in % list)이 나옵니다.
스택 오버플로를 검색했지만 1열 데이터 프레임을 목록으로 변환할 수 있는 직관적인 방법을 찾지 못한 후, 이제 처음으로 스택 오버플로 기여를 게시합니다.
# assuming you have a 1 column dataframe called "df"
list <- c()
for(i in 1:nrow(df)){
list <- append(list, df[i,1])
}
View(list)
# This list is not a dataframe, it is a list of values
# You can filter a dataframe using "subset([Data], [Column] %in% list")
또한 일반적으로 data.frame 열을 단순 벡터로 변환할 수 있습니다. as.vector
구조를 . 첫 번째 요소인 data.frame을 . 따라서 첫 번째(그리고 유일한) 요소도 제거해야 합니다.
df_column_object <- aframe[,2]
simple_column <- df_column_object[[1]]
지금까지 제안된 모든 솔루션에는 하드 코딩 열 제목이 필요합니다.이렇게 하면 일반적이지 않게 됩니다(함수 인수에 이를 적용하는 것을 상상해 보십시오)
또는 열에서 열 이름을 먼저 읽은 다음 다른 솔루션의 코드에 삽입할 수 있습니다.
은 다옵션다같다니습과음을 사용하는 입니다.as.matrix
와 함께as.vector
이 작업은 하나의 열에 대해 수행할 수 있지만 모든 열을 하나의 벡터로 변환하려는 경우에도 가능합니다.다음은 하나의 열을 벡터로 변환하고 두 번째로 완전한 데이터 프레임을 하나의 벡터로 변환하는 재현 가능한 예입니다.
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)
# Convert one column to vector
avector <- as.vector(as.matrix(aframe[,"a2"]))
class(avector)
#> [1] "numeric"
avector
#> [1] 6 7 8 9 10
# Convert all columns to one vector
avector <- as.vector(as.matrix(aframe))
class(avector)
#> [1] "numeric"
avector
#> [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
repref v2.0.2를 사용하여 2022-08-27에 생성됨
언급URL : https://stackoverflow.com/questions/7070173/convert-data-frame-column-to-a-vector
'programing' 카테고리의 다른 글
조건부 값을 사용한 dplyrutation (0) | 2023.07.10 |
---|---|
데이터 프레임의 구분 기호에서 열 분할 (0) | 2023.07.10 |
어디서든 패키지 이름을 가져오는 방법은 무엇입니까? (0) | 2023.07.10 |
ASP.NET MVC 자동 캐싱 옵션을 비활성화하는 방법은 무엇입니까? (0) | 2023.07.05 |
사용자와 상관없이 Excel Workbook을 바탕 화면에 저장하는 방법은 무엇입니까? (0) | 2023.07.05 |