2017-11-07 7 views
1

이와 같은 데이터 프레임이 있다고 가정합니다. dplyr와'select_if'와 'rename_if'에 해당하는 data.table이 있습니까?

df <- data.frame(w = runif(2), x = c(T, F), y = letters[1:2], z = c(1L, 2L)) 

, 내가 쉽게 이름을 바꿀 수 있습니다/열 클래스 또는 논리적 반환하는 모든 다른 기능에 의해 기반을 선택합니다. 예를 들어, 'x'열을 선택하거나 'w'를 'w_hat'으로 바꾸려면

df %>% select_if(is.logical) 
%  x 
% 1 TRUE 
% 2 FALSE 

df %>% rename_if(is.double, paste, 'hat', sep = '_') 
%  w_hat  x y z 
% 1 0.8619479 TRUE a 1 
% 2 0.8750867 FALSE b 2 

을 입력 할 수 있습니다.

이러한 기능 기반 열 선택과 동일한 data.table이 있습니까? data.table

답변

1

은 (setDT(df)) 'data.table'에 'data.frame이'열을 통해 루프의 is.double, unlist을 적용하고 열 이름을 얻을 변환합니다. 그런 다음, setnames 변화에 열 이름

nm1 <- names(which(setDT(df)[, unlist(lapply(.SD, is.double))])) 
setnames(df, nm1, paste0(nm1, "_hat")) 
df 
#  w_hat  x y z 
#1: 0.2925740 TRUE a 1 
#2: 0.2248911 FALSE b 2 

data.table

setDT(df)[, select_if(.SD, is.logical)] 
#  x 
#1: TRUE 
#2: FALSE 


setDT(df)[, rename_if(.SD, is.double, paste, 'hat', sep="_")] 
#  w_hat  x y z 
#1: 0.2925740 TRUE a 1 
#2: 0.2248911 FALSE b 2 

주에 dplyr 편리한 기능을 사용할 수 있습니다 다음 rename_if 원래의 열 이름을 변경하지 않습니다 setnames은 데이터 세트를 변경합니다.

+1

고마워요! 내가 dplyr 함수를 사용할 수 있다는 것을 알면 아주 좋습니다. – Julius