[英]Create new data frame column based on conditioned column names in R
我正在處理一個大型數據集。 該數據集有一個帶有參考代碼的列和其他值為 TRUE 或 FALSE 的列。 我正在嘗試創建一個新列,用於收集值等於 TRUE 的列的串聯名稱(或作為列表)。 dataframe 的簡化類似於:
data <- data.frame( Reference = c("001", "002", "003", "004", "005"),
Column A = c(TRUE, TRUE, FALSE, TRUE, FALSE),
Column B = c(FALSE, TRUE, TRUE, FALSE, FALSE),
Column C = c(TRUE, FALSE, TRUE, FALSE, TRUE))
data
預期的結果是這樣的:
參考 | A列 | B列 | 專欄C | D列 |
---|---|---|---|---|
0001 | 真的 | 錯誤的 | 真的 | A 欄,第 C 欄 |
0002 | 真的 | 真的 | 錯誤的 | A列,B列 |
0003 | 錯誤的 | 真的 | 真的 | B欄,欄C |
0004 | 真的 | 錯誤的 | 錯誤的 | A列 |
0005 | 錯誤的 | 錯誤的 | 真的 | 專欄C |
我知道如何通過連接值或列名來創建字段,但我不知道如何引入條件,以便它只采用值為 TRUE 的列的名稱。
非常感謝您!
使用tidyr::unite()
的tidyverse
解決方案:
library(tidyverse)
data %>%
mutate(unite(across(starts_with('Column'), ~ ifelse(.x, cur_column(), NA)),
col = 'Column_D', sep = ', ', na.rm = TRUE))
# Reference Column_A Column_B Column_C Column_D
# 1 001 TRUE FALSE TRUE Column_A, Column_C
# 2 002 TRUE TRUE FALSE Column_A, Column_B
# 3 003 FALSE TRUE TRUE Column_B, Column_C
# 4 004 TRUE FALSE FALSE Column_A
# 5 005 FALSE FALSE TRUE Column_C
基地R解決方案
data <- data.frame( Reference = c("001", "002", "003", "004", "005"),
Column_A = c(TRUE, TRUE, FALSE, TRUE, FALSE),
Column_B = c(FALSE, TRUE, TRUE, FALSE, FALSE),
Column_C = c(TRUE, FALSE, TRUE, FALSE, TRUE))
L <- apply(data, 1, function(i) which(i == TRUE))
data$Column_D <- lapply(L, function(x) paste0(names(x), collapse = ", "))
# Reference Column_A Column_B Column_C Column_D
# 1 001 TRUE FALSE TRUE Column_A, Column_C
# 2 002 TRUE TRUE FALSE Column_A, Column_B
# 3 003 FALSE TRUE TRUE Column_B, Column_C
# 4 004 TRUE FALSE FALSE Column_A
# 5 005 FALSE FALSE TRUE Column_C
另一個dplyr
選項:
data %>%
rowwise() %>%
mutate(Column_D = toString(names(across(starts_with("Column")))[which(c_across(starts_with("Column")))]))
Reference Column_A Column_B Column_C Column_D
<chr> <lgl> <lgl> <lgl> <chr>
1 001 TRUE FALSE TRUE Column_A, Column_C
2 002 TRUE TRUE FALSE Column_A, Column_B
3 003 FALSE TRUE TRUE Column_B, Column_C
4 004 TRUE FALSE FALSE Column_A
5 005 FALSE FALSE TRUE Column_C
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.