gpt4 book ai didi

r - 使用dplyr根据列名更改数据框中的值?

转载 作者:行者123 更新时间:2023-12-04 09:16:12 25 4
gpt4 key购买 nike

我的问题看起来很简单,但想不出一个简单的解决方案。
我的数据集中所有分类变量都有一个“缺失”值。
为了稍后使用我自己的函数连接结果,我需要这个值是唯一的,所以我想要的是将值“missing”更改为“missing (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()across() .来自 ?context :

cur_column() gives the name of the current column (in across() only).

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()))))

关于r - 使用dplyr根据列名更改数据框中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63196323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com