Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 重命名时将轴转得更宽_R_Tidyr - Fatal编程技术网

R 重命名时将轴转得更宽

R 重命名时将轴转得更宽,r,tidyr,R,Tidyr,我有一张这样的桌子 id name value 1 PROD_N NA 2 PROD_N_NATIONAL 0.789 3 PROD_N1 0.5 4 PROD_N1_NATIONAL 0.2 5 PROD_N2 0.4 6 PROD_N2_NATIONAL 0.3 7 PROD_N3 NA 8 PROD_N3_NATIONAL 0.2

我有一张这样的桌子

 id name            value
 1 PROD_N           NA    
 2 PROD_N_NATIONAL  0.789
 3 PROD_N1          0.5    
 4 PROD_N1_NATIONAL 0.2    
 5 PROD_N2          0.4    
 6 PROD_N2_NATIONAL 0.3   
 7 PROD_N3          NA    
 8 PROD_N3_NATIONAL 0.221    
 9 PROD_N4          0.2    
10 PROD_N4_NATIONAL  0.391
我需要像这样的东西(为了使gg图分组填充栏)

我几乎可以肯定我应该更广泛地使用pivot_,但我无法做到这一点。我总是以

id prod_n prod_n_national prod_n1 prod_n1_national ...
另外,这是另一个问题,但即使使用所需的表,我也不确定如何在同一个图中绘制两个“y”值。但我会看看我什么时候到


谢谢你的提示

在将表格转换为宽格式之前,我看到了两个可能需要处理的步骤

  • 必须根据
    名称
    列中的数字创建
    年份
  • 必须删除
    名称
    列中的数字
  • 代码

    df  %>% 
      mutate(year = 2020 - replace_na(as.numeric(str_extract(name, "\\d")), 0),
             name = str_remove(name, "\\d")) %>% 
      pivot_wider(id_cols = year, 
                  names_from = name,
                  values_from = value) %>% 
      mutate(ID = row_number())
    
    # A tibble: 5 x 4
       year PROD_N PROD_N_NATIONAL    ID
      <dbl>  <dbl>           <dbl> <int>
    1  2020   NA             0.789     1
    2  2019    0.5           0.2       2
    3  2018    0.4           0.3       3
    4  2017   NA             0.221     4
    5  2016    0.2           0.39      5
    
    如果您想要相同的
    geom_x
    但名称颜色不同,则可能需要长格式:

    df  %>% 
      mutate(year = 2020 - replace_na(as.numeric(str_extract(name, "\\d")), 0),
             name = str_remove(name, "\\d")) %>%
      ggplot() +
      geom_line(aes(y = value, x = year, color = name)) 
    

    我看到在将表转换为宽格式之前可能需要处理两个步骤

  • 必须根据
    名称
    列中的数字创建
    年份
  • 必须删除
    名称
    列中的数字
  • 代码

    df  %>% 
      mutate(year = 2020 - replace_na(as.numeric(str_extract(name, "\\d")), 0),
             name = str_remove(name, "\\d")) %>% 
      pivot_wider(id_cols = year, 
                  names_from = name,
                  values_from = value) %>% 
      mutate(ID = row_number())
    
    # A tibble: 5 x 4
       year PROD_N PROD_N_NATIONAL    ID
      <dbl>  <dbl>           <dbl> <int>
    1  2020   NA             0.789     1
    2  2019    0.5           0.2       2
    3  2018    0.4           0.3       3
    4  2017   NA             0.221     4
    5  2016    0.2           0.39      5
    
    如果您想要相同的
    geom_x
    但名称颜色不同,则可能需要长格式:

    df  %>% 
      mutate(year = 2020 - replace_na(as.numeric(str_extract(name, "\\d")), 0),
             name = str_remove(name, "\\d")) %>%
      ggplot() +
      geom_line(aes(y = value, x = year, color = name)) 
    

    谢谢,我刚试过,但很奇怪,我的“prod_N”和“prod_N_national”现在都列在名单上了。你知道为什么吗?嘿,为了记录在案,由于这个链接,我知道如何从pivot到WideThank“取消”列表。谢谢,我刚刚尝试过,但很奇怪,我的“prod_N”和“prod_N_national”现在是一个列表。你知道为什么吗?嘿,只是为了记录在案,多亏了这个链接,我明白了如何从轴到宽“取消”列表
    df  %>% 
      mutate(year = 2020 - replace_na(as.numeric(str_extract(name, "\\d")), 0),
             name = str_remove(name, "\\d")) %>%
      ggplot() +
      geom_line(aes(y = value, x = year, color = name))