원래 변수는 그대로 유지하면서 mutate_at로 새 변수 만들기
다음과 같은 간단한 예를 생각해 보십시오.
library(dplyr)
library(tibble)
dataframe <- tibble(helloo = c(1,2,3,4,5,6),
ooooHH = c(1,1,1,2,2,2),
ahaaa = c(200,400,120,300,100,100))
# A tibble: 6 x 3
helloo ooooHH ahaaa
<dbl> <dbl> <dbl>
1 1 1 200
2 2 1 400
3 3 1 120
4 4 2 300
5 5 2 100
6 6 2 100
여기에 그 기능을 적용하고 싶습니다.ntile
포함된 모든 열에oo
, 하지만 저는 이 새로운 칼럼들을cat
+ 대응란
내가 할 수 있다는 걸 알아요
dataframe %>% mutate_at(vars(contains('oo')), .funs = funs(ntile(., 2)))
# A tibble: 6 x 3
helloo ooooHH ahaaa
<int> <int> <dbl>
1 1 1 200
2 1 1 400
3 1 1 120
4 2 2 300
5 2 2 100
6 2 2 100
하지만 내게 필요한 건 이건
# A tibble: 8 x 5
helloo ooooHH ahaaa cat_helloo cat_ooooHH
<dbl> <dbl> <dbl> <int> <int>
1 1 1 200 1 1
2 2 1 400 1 1
3 3 1 120 1 1
4 4 2 300 2 2
5 5 2 100 2 2
6 5 2 100 2 2
7 6 2 100 2 2
8 6 2 100 2 2
중간 데이터를 저장하고 원래 데이터 프레임으로 다시 병합할 필요가 없는 솔루션이 있습니까?
dplyr 1.0.0에 대한 2020-06 업데이트
dplyr 1.0.0부터 시작하여,across()
함수는 다음과 같은 함수의 "범위 변형"을 대체합니다.mutate_at()
. 코드는 상당히 친숙하게 보여야 합니다.across()
, 그 안에 내포되어 있는mutate()
.
목록에 지정한 함수에 이름을 추가하면 함수 이름이 접미사로 추가됩니다.
dataframe %>%
mutate( across(contains('oo'),
.fns = list(cat = ~ntile(., 2))) )
# A tibble: 6 x 5
helloo ooooHH ahaaa helloo_cat ooooHH_cat
<dbl> <dbl> <dbl> <int> <int>
1 1 1 200 1 1
2 2 1 400 1 1
3 3 1 120 1 1
4 4 2 300 2 2
5 5 2 100 2 2
6 6 2 100 2 2
1.0.0에서는 새 열 이름을 변경하는 것이 조금 더 쉽습니다..names
의 논쟁.across()
. 접미사 대신 접두사로 함수 이름을 추가하는 예는 다음과 같습니다.글루 구문을 사용합니다.
dataframe %>%
mutate( across(contains('oo'),
.fns = list(cat = ~ntile(., 2)),
.names = "{fn}_{col}" ) )
# A tibble: 6 x 5
helloo ooooHH ahaaa cat_helloo cat_ooooHH
<dbl> <dbl> <dbl> <int> <int>
1 1 1 200 1 1
2 2 1 400 1 1
3 3 1 120 1 1
4 4 2 300 2 2
5 5 2 100 2 2
6 6 2 100 2 2
mutate_at()이 있는 원래 답변
dplyr의 변경 사항을 반영하도록 편집되었습니다.dplyr 0.8.0 기준,funs()
사용되지 않습니다.list()
와 함께~
대신 사용해야 합니다.
전달할 목록에 함수 이름을 지정할 수 있습니다..funs
접미사로 이름을 붙여 새 변수를 만듭니다.
dataframe %>% mutate_at(vars(contains('oo')), .funs = list(cat = ~ntile(., 2)))
# A tibble: 6 x 5
helloo ooooHH ahaaa helloo_cat ooooHH_cat
<dbl> <dbl> <dbl> <int> <int>
1 1 1 200 1 1
2 2 1 400 1 1
3 3 1 120 1 1
4 4 2 300 2 2
5 5 2 100 2 2
6 6 2 100 2 2
만약 당신이 그것을 접두사로 원한다면, 당신은 다음을 사용할 수 있습니다.rename_at
이름을 바꾸려고 합니다
dataframe %>%
mutate_at(vars(contains('oo')), .funs = list(cat = ~ntile(., 2))) %>%
rename_at( vars( contains( "_cat") ), list( ~paste("cat", gsub("_cat", "", .), sep = "_") ) )
# A tibble: 6 x 5
helloo ooooHH ahaaa cat_helloo cat_ooooHH
<dbl> <dbl> <dbl> <int> <int>
1 1 1 200 1 1
2 2 1 400 1 1
3 3 1 120 1 1
4 4 2 300 2 2
5 5 2 100 2 2
6 6 2 100 2 2
이전코드와funs()
이전 버전의 dplyr에서:
dataframe %>%
mutate_at(vars(contains('oo')), .funs = funs(cat = ntile(., 2))) %>%
rename_at( vars( contains( "_cat") ), funs( paste("cat", gsub("_cat", "", .), sep = "_") ) )
언급URL : https://stackoverflow.com/questions/45947787/create-new-variables-with-mutate-at-while-keeping-the-original-ones
'programing' 카테고리의 다른 글
PL/SQL <>의 의미는 무엇입니까? (0) | 2023.11.07 |
---|---|
오라클 프로시저 내에서 date parameter를 전달하는 방법은? (0) | 2023.11.07 |
매크로에서 사용할 수 있는 트릭에는 어떤 것이 있습니까? (0) | 2023.11.07 |
C/C++에서 OpenGL 셰이더를 위한 손쉬운 프레임워크 (0) | 2023.11.07 |
PHP oci_connect() TNS: 연결 식별자(ORA-12154)를 확인할 수 없습니다. (0) | 2023.11.07 |