簡體   English   中英

根據 dplyr 的列名更改 dataframe 中的值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM