我有一個要從長格式轉換為寬格式的資料集。我的原始資料集包含每個物種(“代碼”)的發生國家作為列之一。我為所有國家代碼(例如,“FI”、“NO”)創建了新列,現在我需要將“代碼”中的資料轉換為這些列(例如,對于 df$FI,如果 df$Name == “FI”然后是,否則不適用)。有沒有辦法在所有這些新列中自動執行此操作(如果 df$Name 中的值等于列標題,則回傳 YES 值,否則將回傳 NA 值),還是我必須為創建的每個新列手動執行此操作?謝謝。
Name code
1 ABC FI
2 ABC NO
3 ABC RU
4 ABC SE
5 BCD IT
6 BCD RO
uj5u.com熱心網友回復:
這是一個有點奇怪的解決方案
library(tidyverse)
example_data <- read_table('Name code
ABC NO
ABC RU
ABC SE
BCD IT
BCD RO')
example_data |>
pivot_wider(names_from = code,values_from = code) |>
mutate(across(-Name,.fns = ~ if_else(.x |> is.na(),
NA_character_,
'YES')))
#> # A tibble: 2 x 6
#> Name NO RU SE IT RO
#> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 ABC YES YES YES <NA> <NA>
#> 2 BCD <NA> <NA> <NA> YES YES
由reprex 包于 2022-01-24 創建(v2.0.1)
uj5u.com熱心網友回復:
一種使用方式table()。
with(dat, table(Name, code)) |>
apply(1:2, \(x) ifelse(x == 1, 'YES', NA)) |>
data.frame(Name=unique(dat$Name))
# FI IT NO RO RU SE Name
# ABC YES <NA> YES <NA> YES YES ABC
# BCD <NA> YES <NA> YES <NA> <NA> BCD
注意:使用R >= 4.1。
資料:
dat <- structure(list(Name = c("ABC", "ABC", "ABC", "ABC", "BCD", "BCD"
), code = c("FI", "NO", "RU", "SE", "IT", "RO")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/420954.html
標籤:
