是否有data.table相当于' select_if'和' rename_if'?

时间:2017-11-07 05:46:47

标签: r dataframe dplyr data.table

假设我有这样的数据框。

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

使用dplyr,我可以根据列类或任何其他返回逻辑的函数轻松地重命名/选择。例如,我可以做

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

选择&#39; x&#39;列,或重命名&#39; w&#39;到&#39; w_hat&#39;。

是否有任何data.table相当于这些基于函数的列选择?

1 个答案:

答案 0 :(得分:2)

使用data.table,将'data.frame'转换为'data.table'(setDT(df)),遍历列,应用is.doubleunlist和获取列名称。然后,使用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

可以使用dplyr

中的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

注意:rename_if不会更改原始数据集中的列名,setnames确实会更改它。