繁体   English   中英

R dplyr mutate_at 访问 colnames

[英]R dplyr mutate_at accessing colnames

如何访问dplyr::mutate_at正在处理的列名?

假设我们想将数据框的一列转换为因子,其级别存储在单独的列表中。

df <- data.frame("C1"=c("A","B","C"), "C2"=c("D","E","F"))
df
  C1 C2
1  A  D
2  B  E
3  C  F

lst <- list("C2"=c("F","E","D"), "C3"=c("G","H","I"))
lst
$C2
[1] "F" "E" "D"

$C3
[1] "G" "H" "I"

以下所有触发错误或将所有列值替换为 NA:

df %>%
mutate_at(vars(C2), function(x) factor(x, levels=lst$.))

df %>%
mutate_at(vars(C2), function(x) factor(x, levels=lst[[colnames(.)]]))

df %>%
mutate_at(vars(C2), function(x){col = as.name(.); factor(x, levels=lst$col))

在使用intersect获取公共列后,您可以在基础purrrmap2中使用Map或 purrr 中的 map2。

cols <- intersect(names(lst), names(df))
df[cols] <- Map(function(x, y) factor(x, levels = y), df[cols], lst[cols])

或者

df[cols] <- purrr::map2(df[cols], lst[cols], ~factor(.x, levels = .y))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM