【发布时间】:2019-11-16 14:02:52
【问题描述】:
是否可以 (1) 使用选择助手和 (2) 检查列类型来应用函数?
例如,这不起作用 - 我想将所有名称不包含“VAL”的整数列转换为因子:
dane_usa_nr%>%
mutate_at(vars(!contains("VAL")) & is.integer , as.factor)
是否可以在 dplyr 中使用其他语法?
【问题讨论】:
是否可以 (1) 使用选择助手和 (2) 检查列类型来应用函数?
例如,这不起作用 - 我想将所有名称不包含“VAL”的整数列转换为因子:
dane_usa_nr%>%
mutate_at(vars(!contains("VAL")) & is.integer , as.factor)
是否可以在 dplyr 中使用其他语法?
【问题讨论】:
试试这个。它会改变所有不包含“VAL”的列。然后它会检查它是否是整数。如果是,它将使用as.factor()。如果不是,它只会返回该列。
dane_usa_nr%>%
mutate_at(vars(!contains("VAL")), function(x) if (is.integer(x)) as.factor(x) else x)
【讨论】:
不完全是dplyr 的方法,但您可以创建一个满足所需条件的逻辑向量。
inds <- (!grepl("VAL", names(dane_usa_nr))) & (sapply(dane_usa_nr, is.integer))
然后在mutate_if中使用这个向量
library(dplyr)
dane_usa_nr %>% mutate_if(inds, as.factor)
或lapply
dane_usa_nr[inds] <- lapply(dane_usa_nr[inds], as.factor)
我们也可以获取索引并在mutate_at中使用
inds <- intersect(grep("VAL", names(dane_usa_nr), invert = TRUE),
which(sapply(dane_usa_nr, is.integer)))
dane_usa_nr %>% mutate_at(inds, as.factor)
在这种情况下,基本 R 实现保持不变。
【讨论】: