![](/img/trans.png)
[英]Add column to dataframe according to values in multiple dataframes in dplyr
[英]change values in dataframe according to column name with dplyr?
我的問題看起來很簡單,但想不出一個簡單的解決方案。 我的數據集中的所有分類變量都有一個“缺失”的值。 為了稍后使用我自己的 function 加入結果,我需要這個值是唯一的,所以我想要的是通過“缺失(var_name)”更改值“缺失”。
我首先嘗試了類似的東西:
data %>% mutate(across(where(is.character),
~ replace(., . == "missing", paste("missing", SOMETHING(.)))))
這不太奏效,因為我錯過了這個SOMETHING
function 來訪問across
cross語句中的列名,只需使用“。” 范圍...
我嘗試的另一個解決方案是使用
purrr:imap(data %>% select(where(is.character)),
~ replace(.x, .x == "missing", paste("missing", .y))))
這與我想要的很接近,但是我無法輕松地將purrr:imap
output 重新插入到我的初始 dataframe 而不是初始字符列中。
我想我需要一些休息和/或一些幫助才能看得更清楚,因為我有點厭倦了與看似如此簡單的事情作斗爭......
我寧願使用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
,您可以在 cross() 中使用cur_column()
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()))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.