데이터 프레임의 두 열을 명명된 벡터로 변환
여러 줄로 된 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_names
대base::setNames
교환이 가능합니다.나는 단지 전자가 어울리기 때문에 더 좋습니다."set_(col|row)?names"
.
언급URL : https://stackoverflow.com/questions/19265172/converting-two-columns-of-a-data-frame-to-a-named-vector
'programing' 카테고리의 다른 글
C와 C++의 Float와 Double의 크기는 어떻게 됩니까? (0) | 2023.09.11 |
---|---|
구조 객체가 없는 C 포인터 산술 (0) | 2023.09.11 |
Angular App은 새 배포 후 캐시를 삭제해야 함 (0) | 2023.09.11 |
mysql의 날짜별 데이터에서 월별 행 수 가져오기 (0) | 2023.09.11 |
도커-영구 데이터 MySQL 구성 (0) | 2023.09.11 |