簡體   English   中英

重新排列數據框中的值並將其提取到 R 中的特定列

[英]Rearrange and extract values from a data frame to specific columns in R

我有一個像這樣的 dataframe df

> df <- data.frame(type=c("Id","v1","v2","Id","v1","v1","v2","Id","v1","v2","v3"),num=c(1000,200,500,1001,727,50,800,1002,400,365,865))
> df
   type  num
1    Id 1000
2    v1  200
3    v2  500
4    Id 1001
5    v1  727
6    v1   50
7    v2  800
8    Id 1002
9    v1  400
10   v2  365
11   v3  865

我需要創建另一個數據框,其中Id、v1、v2、v3作為列名和df中的相應值,以便每個 id 下面的變量屬於該 id,並且當相同的變量重復時,它必須映射為相同的 id如果變量不存在,則必須給出 NA。 這是所需的 output。

    Id  v1  v2  v3
1 1000 200 500  NA
2 1001 727  NA  NA
3 1001  50 800  NA
4 1002 400 365 865

我想過一種使用 for 循環的方法。 但它似乎復雜且難以構建它。 有沒有辦法不使用 for 循環。

嘗試這樣做

   library(tidyverse) 
   df %>% 
      mutate(id = ifelse(type == "Id", num, NA)) %>% 
      fill(id) %>% 
      filter(type != "Id") %>% 
      group_by(id, type) %>% 
      mutate(n = row_number()) %>% 
      pivot_wider(c(id, n), names_from = type, values_from = num) %>% 
      select(-n) %>% 
      ungroup()

# A tibble: 4 x 4
     id    v1    v2    v3
  <dbl> <dbl> <dbl> <dbl>
1  1000   200   500    NA
2  1001   727   800    NA
3  1001    50    NA    NA
4  1002   400   365   865

暫無
暫無

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

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