r - 使用 dplyr 根据列名更改数据框中的值?
问题描述
我的问题看起来很简单,但想不出一个简单的解决方案。我的数据集中的所有分类变量都有一个“缺失”的值。为了稍后使用我自己的函数连接结果,我需要这个值是唯一的,所以我想要的是通过“缺失(var_name)”更改值“缺失”。
我首先尝试了类似的东西:
data %>% mutate(across(where(is.character),
~ replace(., . == "missing", paste("missing", SOMETHING(.)))))
这不太有效,因为我错过了这个SOMETHING
函数来访问整个across
语句中的列名,只使用“。” 范围...
我尝试的另一个解决方案是使用
purrr:imap(data %>% select(where(is.character)),
~ replace(.x, .x == "missing", paste("missing", .y))))
这接近我想要的,但是我很难轻松地将purrr:imap
输出重新插入到我的初始数据帧而不是初始字符列中。
我想我需要一些休息和/或一些帮助才能看得更清楚,因为我有点厌倦了与看似如此简单的事情作斗争......
我宁愿使用该dplyr
解决方案,但purrr
可以。实际上,任何工作都很好而且很快(你知道,我有 600 多个列和 150,000 行)
欢迎任何帮助或建议!
谢谢
解决方案
示例数据
df <- data.frame(var.X = c("a", "missing", "a"),
var.Y = c("b", "b", "missing"),
var.Z = c("missing", "missing", "c"))
# var.X var.Y var.Z
# 1 a b missing
# 2 missing b missing
# 3 a missing c
通过dplyr
,您可以使用cur_column()
in across()
。来自?context
:
cur_column() 给出当前列的名称(仅在 cross() 中)。
library(dplyr)
df %>%
mutate(across(where(is.character),
~ recode(.x, missing = paste0("missing(", cur_column(), ")"))))
# var.X var.Y var.Z
# 1 a b missing(var.Z)
# 2 missing(var.X) b missing(var.Z)
# 3 a missing(var.Y) c
或者
df %>%
mutate(across(where(is.character),
~ recode(.x, missing = sprintf("missing(%s)", cur_column()))))
推荐阅读
- python - 从日期列中提取年份和月份作为 Pyspark 中的字符串
- javascript - 如何将代码中的 MAX_ATTEMPTS 设置为 Google Cloud Task?
- javascript - 从 localStorage 获取数据时出现此错误(TypeError:无法读取 null 的属性(读取 'insertRow'))
- monaco-editor - 摩纳哥编辑hoverMessage未显示
- typescript - 如何强输入组合的 mixin?
- reactjs - React - 如何在材料ui表的单元格中换行
- php - 未知选项 2 用法:s_client args
- javascript - 如何为每次迭代异步调用多个异步依赖函数?
- python - Apache Airflow 中断迁移阻止运行独立模式
- java - thymeleaf 是否支持动态模型属性名称?