簡體   English   中英

變異一列並以 R 中函數的輸入變量命名

[英]Mutate a column and name it after the input variable for a function in R

我在 R 中有一個數據框,它寬 89 列,長 500,000 行。 在每一列中有多個 4 位數字代碼,它們可以在任何列中。 我想創建一個掃描每一行以查看代碼是否存在的函數,如果它確實標記為 1 如果不是 0,則新列必須命名為搜索的代碼或非常相似的東西(附加字母等),沖洗並重復大約 450 個這樣的代碼。 每個新列都會在被搜索的代碼之后以某種方式標記,如下面的 3669 列。

  c1   c2   c3   3369
1 2255 3669 NA   1
2 NA   5555 6598 0
3 NA   NA   1245 0

我曾嘗試使用 mutate 和 rowSums 來做到這一點,見下文,它適用於單個代碼,但在使用 sapply 函數時我無法開始工作。 它只是創建一個名為“x”的列

a <- function(x) {
    SR2 <<- SR2 %>% mutate(x = ifelse(rowSums(SR2 == x, na.rm = TRUE) > 0, 1, 0))

}

這個函數中的 x 是一個代碼列表,所以 "3369"、"2255" 等等。

我在這里缺少什么?

使用quo_name!! 以獲得正確的列名。 使用map_dfc獲取數據框中的輸出

library(purrr)
library(dplyr)
df_out <- map_dfc(c('2255','5555'), 
                  ~transmute(df,!!quo_name(.x) := ifelse(rowSums(df == .x, na.rm = TRUE) > 0, 1, 0)))

bind_cols(df,df_out)

數據

df <- structure(list(c1 = c(2255L, NA, NA), c2 = c(3669L, 5555L, NA), c3 = c(NA, 6598L, 1245L), 
         `3369` = c(1L, 0L, 0L)), class = "data.frame", row.names = c("1", "2", "3")) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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