假设我有这样的数据框。
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相当于这些基于函数的列选择?
答案 0 :(得分:2)
使用data.table
,将'data.frame'转换为'data.table'(setDT(df)
),遍历列,应用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
可以使用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
确实会更改它。