[英]How to collapse grouped information spread across different columns in R
我有一個問題應該有一個非常直接的解決方案,但我似乎找不到它。 基本上我有嵌套在區*縣內的觀察,但他們的候選人價值是錯誤的,並且單個候選人的信息分布在多個列中。 原始數據集有同樣的問題,但不是只有四個非分組變量,而是有 500 多個。
但這是現在的樣子:
current_df
county district candidate name votes party
1 E100 1 1 john NA <NA>
2 E100 1 2 <NA> 100 <NA>
3 E100 1 3 <NA> NA D
4 E101 2 4 maria NA <NA>
5 E101 2 5 <NA> 200 <NA>
6 E101 2 6 <NA> NA I
7 E202 1 7 tom NA <NA>
8 E202 1 8 <NA> 78 <NA>
9 E202 1 9 <NA> NA R
10 E204 3 10 jose NA <NA>
11 E204 3 11 <NA> 120 <NA>
12 E204 3 12 <NA> NA <NA>
這就是我想要的:
target_df <- data.frame(county = c("E100", "E101","E202", "E204"),
district= c(1, 2, 1, 3),
candidate = c(1, 1, 2, 1),
name = c("john","maria",
"tom", "jose"),
votes = c(100,
200,
78,
120),
party = c( "D",
"I",
"R",
NA))
同樣,如果有一個解決方案不是建立在除縣和區之外只有 4 個變量的事實的基礎上,那是理想的,因為我有很多 dataframe。作為參考, candidate
只是每個候選人的有序指標區。
此外,有些行,例如target_df
中candidate == "jose"
的行,其政黨價值為 NA。 這只是數據上下文的 function。
我已經嘗試了很多方法,但仍然找不到做得好的東西。 非常歡迎任何指點,謝謝!
這是另一種選擇(也忽略了candidate
的問題。您可以通過采用非 NA 的第一個實例來總結每個組
library(tidyverse)
current_df |>
group_by(county, district) |>
summarise(across(everything(), ~first(.[!is.na(.)])))
#> # A tibble: 4 x 6
#> # Groups: county [4]
#> county district candidate name votes party
#> <chr> <dbl> <dbl> <chr> <dbl> <chr>
#> 1 E100 1 1 john 100 D
#> 2 E101 2 4 maria 200 I
#> 3 E202 1 7 tom 78 R
#> 4 E204 3 10 jose 120 R
或其他選擇。 按組填寫NA和select一審:
current_df %>%
group_by(county, district)|>
fill(everything(), .direction = "updown") |>
filter(row_number() == 1)
#> # A tibble: 4 x 6
#> # Groups: county, district [4]
#> county district candidate name votes party
#> <chr> <dbl> <dbl> <chr> <dbl> <chr>
#> 1 E100 1 1 john 100 D
#> 2 E101 2 4 maria 200 I
#> 3 E202 1 7 tom 78 R
#> 4 E204 3 10 jose 120 R
部分解決方案,直到列candidate
被完全解釋
library(tidyverse)
df %>%
mutate(across(everything(), as.character)) %>%
select(-candidate) %>%
pivot_longer(-c(1:2)) %>%
drop_na() %>%
pivot_wider(names_from = name,
values_from = value)
# A tibble: 4 × 5
county district name votes party
<chr> <chr> <chr> <chr> <chr>
1 E100 1 john 100 D
2 E101 2 maria 200 I
3 E202 1 tom 78 R
4 E204 3 jose 120 R
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.