R에서 요인으로 유사한 데이터 프레임에서 선택한 변수를 설정하는 루프로 다시 작성
Nov 24 2020
여러 해 동안의 데이터가 각각 동일한 데이터 프레임에 있으므로 모든 연도를 목록에 넣은 다음 매년 명령을 반복하는 대신 for 루프를 작성하고 싶습니다.
#set dummies as factors (these dummies repeat across years)
mydummies<-c ('hru_i', 'ge_nonngsother_i','ge_sgt_i')
DF2012[,mydummies]<-lapply(DF2012[,mydummies],factor)
DF2013[,mydummies]<-lapply(DF2013[,mydummies],factor)
루프를 실행할 수 있도록 모든 데이터 프레임을 목록에 넣으려고했지만 데이터 프레임이 변경되지 않았습니다.
df.list<- list(DF2012,DF2013)
#want to create a loop here
답변
1 GregorThomas Nov 24 2020 at 20:12
중첩 lapply
이 작동합니다.
df.list <- lapply(df.list, function(d) {
d[mydummies] <- lapply(d[mydummies], factor)
d
})
다음은 작동 함을 보여주는 재현 가능한 예입니다.
df.list = list(a = head(mtcars), b = head(mtcars))
mydummies = c("cyl", "am")
sapply(df.list, sapply, class)
# a b
# mpg "numeric" "numeric"
# cyl "numeric" "numeric"
# disp "numeric" "numeric"
# hp "numeric" "numeric"
# drat "numeric" "numeric"
# wt "numeric" "numeric"
# qsec "numeric" "numeric"
# vs "numeric" "numeric"
# am "numeric" "numeric"
# gear "numeric" "numeric"
# carb "numeric" "numeric"
df.list <- lapply(df.list, function(d) {
d[mydummies] <- lapply(d[mydummies], factor)
d
})
# a b
# mpg "numeric" "numeric"
# cyl "factor" "factor"
# disp "numeric" "numeric"
# hp "numeric" "numeric"
# drat "numeric" "numeric"
# wt "numeric" "numeric"
# qsec "numeric" "numeric"
# vs "numeric" "numeric"
# am "factor" "factor"
# gear "numeric" "numeric"
# carb "numeric" "numeric"
1 akrun Nov 24 2020 at 20:24
우리는 사용할 수 있습니다 tidyverse
library(dplyr)
library(purrr)
df.list <- map(df.list, ~ .x %>%
mutate(across(all_of(mydummies), factor)))
데이터
df.list <- list(a = head(mtcars), b = head(mtcars))
mydummies <- c("cyl", "am")