簡體   English   中英

在 R 中將列更改為連續觀察

[英]Changing a Column to an Observation in a Row in R

我目前正在努力將我的數據中的一列轉換為一行作為觀察。 以下是我的數據的代表性示例:

library(tidyverse)
test_df <- tibble(unit_name=rep("Chungcheongbuk-do"),unit_n=rep(2),
               can=c("Cho Bong-am","Lee Seung-man","Lee Si-yeong","Shin Heung-woo"),
               pev1=rep(510014),vot1=rep(457815),vv1=rep(445955),
               ivv1=rep(11860),cv1=c(25875,386665,23006,10409),
               abstention=rep(52199))

如上所示, abstention列存在於我的數據框的末尾,我希望我的數據如下所示:

library(tidyverse)
desired_df <- tibble(unit_name=rep("Chungcheongbuk-do"),unit_n=rep(2),
                     can=c("Cho Bong-am","Lee Seung-man","Lee Si-yeong","Shin Heung-woo","abstention"),
                     pev1=rep(510014),vot1=rep(457815),vv1=rep(445955),
                     ivv1=rep(11860),cv1=c(25875,386665,23006,10409,52199))

在這里,棄權被視為候選人,在can中。 至此,數據的rest保持不變,棄權值是自己在cv1列中觀察到的。

我曾嘗試使用pivot_wider ,但我不確定如何使用 arguments 來獲得我想要的東西。 我還考慮過t()將列轉換為一行,但也很難將其重新插入我的數據中。 任何幫助表示贊賞! 謝謝!

這是一個策略,如果您有多個 unit_names 將起作用

test_df %>% 
  group_split(unit_name) %>%
  map( function(group_data) {
    slice(group_data, 1) %>% 
      mutate(can="abstention", cv1=abstention) %>% 
      add_row(group_data, .) %>%
      select(-abstention)
  }) %>% 
  bind_rows()

基本上我們按 unit_name 拆分數據,然后我們抓取每個組的第一行並移動值。 Append 即為每個組的新行,然后重新組合所有組。

暫無
暫無

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

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