programing

데이터 프레임의 두 열을 명명된 벡터로 변환

megabox 2023. 9. 11. 21:34
반응형

데이터 프레임의 두 열을 명명된 벡터로 변환

여러 줄로 된 2열로 변환해야 합니다.data.frame이름있는 캐릭터 벡터로. 나의data.frame다음과 같습니다.

dd = data.frame(crit = c("a","b","c","d"), 
                name = c("Alpha", "Beta", "Caesar", "Doris")
                )

제게 정말 필요한 것은

whatiwant = c("a" = "Alpha",
              "b" = "Beta",
              "c" = "Caesar",
              "d" = "Doris")

사용.names함수:

whatyouwant <- as.character(dd$name)
names(whatyouwant) <- dd$crit

as.character꼭 필요한 이유는data.frame그리고.read.table기본 설정을 사용하여 문자를 요인으로 변환합니다.

원라이너를 원하시는 경우:

whatyouwant <- setNames(as.character(dd$name), dd$crit)

이것은 tibble package에서 사용할 수도 있습니다.

tibble::deframe()

첫 번째 열을 이름으로, 두 번째 열을 값으로 변환합니다.

다음은 매우 일반적이고, 쉽고, 깔끔한 방법입니다.

library(dplyr)

iris %>%
  pull(Sepal.Length, Species)

첫 번째 인수는 값이고, 두 번째 인수는 이름입니다.

벡터를 만들 수 있습니다.dd$name, 를 사용하여 이름을 추가합니다.names(), 하지만 당신은 한 걸음에 모든 것을 할 수 있습니다.structure():

whatiwant <- structure(as.character(dd$name), names = as.character(dd$crit))

다양성을 위해서 시도해보세요.split그리고.unlist:

unlist(split(as.character(dd$name), dd$crit))
#        a        b        c        d 
#  "Alpha"   "Beta" "Caesar"  "Doris" 

그리고 또.magrittr노출 파이프()%$%통해 이에 대한 해결책:

library(magrittr)

dd %$% set_names(as.character(name), crit)

에 비해 사소한 이점tibble::deframe논쟁처럼 정확히 2열 프레임/블레블을 가질 필요가 없다는 것입니다(즉, a를 피합니다).select(value_col, name_col) %>%).

참고하세요.magrittr::set_namesbase::setNames교환이 가능합니다.나는 단지 전자가 어울리기 때문에 더 좋습니다."set_(col|row)?names".

언급URL : https://stackoverflow.com/questions/19265172/converting-two-columns-of-a-data-frame-to-a-named-vector

반응형