我有一個像這樣的資料框:
標題1 | 標頭2 | 標題3 | 標題4 |
---|---|---|---|
不適用 | 不適用 | X | 是的 |
一個 | 不適用 | d | b |
不適用 | b | 是的 | 不適用 |
C | X | 不適用 | 一個 |
我想用標題名稱替換所有非 NA 單元格(即具有值:a、b、c、d、x、y、z):
標題1 | 標頭2 | 標題3 | 標題4 |
---|---|---|---|
不適用 | 不適用 | 標題3 | 標題4 |
標題1 | 不適用 | 標題3 | 標題4 |
不適用 | 標頭2 | 標題3 | 不適用 |
標題1 | 標頭2 | 不適用 | 標題4 |
謝謝!
uj5u.com熱心網友回復:
使用cur_column()
內部ifelse
和across
:
library(tidyverse)
df = tibble(
header1 = sample(c(NA, "a", "b", "c"), 4),
header2 = sample(c(NA, "a", "b", "c"), 4),
header3 = sample(c(NA, "a", "b", "c"), 4),
header4 = sample(c(NA, "a", "b", "c"), 4))
> df
# A tibble: 4 × 4
header1 header2 header3 header4
<chr> <chr> <chr> <chr>
1 b a NA b
2 NA NA c a
3 a c a c
4 c b b NA
> df %>% mutate(across(.fns = ~ ifelse(!is.na(.), cur_column(), NA)))
# A tibble: 4 × 4
header1 header2 header3 header4
<chr> <chr> <chr> <chr>
1 header1 header2 NA header4
2 NA NA header3 header4
3 header1 header2 header3 header4
4 header1 header2 header3 NA
uj5u.com熱心網友回復:
Ricardo Semi?o e Castro 的答案使用tidyverse
包和語法非常有效,但您也可以通過for
在列上回圈來使用基本 R:
df = data.frame(
header1 = sample(c(NA, "a", "b", "c"), 4),
header2 = sample(c(NA, "a", "b", "c"), 4),
header3 = sample(c(NA, "a", "b", "c"), 4),
header4 = sample(c(NA, "a", "b", "c"), 4))
colnames <- colnames(df)
for(col in colnames){
df[[col]][!is.na(df[[col]])] <- col
}
uj5u.com熱心網友回復:
您也可以在沒有回圈的基礎 R 中進行一次賦值:
df[!is.na(df)] <- names(df)[col(df)[!is.na(df)]]
uj5u.com熱心網友回復:
另一種選擇(雖然比 Ricardo 的更詳細)是轉為長格式,然后使用ifelse
陳述句更新字串,然后轉回寬格式。
library(tidyverse)
df %>%
pivot_longer(everything()) %>%
group_by(name) %>%
mutate(value = ifelse(!is.na(value), name, value),
row = row_number()) %>%
pivot_wider(names_from = "name", values_from = "value") %>%
select(-row)
輸出
header1 header2 header3 header4
<chr> <chr> <chr> <chr>
1 NA NA header3 header4
2 header1 NA header3 header4
3 NA header2 header3 NA
4 header1 header2 NA header4
資料
df <- structure(list(header1 = c(NA, "a", NA, "c"), header2 = c(NA,
NA, "b", "x"), header3 = c("x", "d", "y", NA), header4 = c("y",
"b", NA, "a")), class = "data.frame", row.names = c(NA, -4L))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529442.html
標籤:r
上一篇:R澄清公式的含義