r - 在 R 中创建唯一 ID 列

标签 r dplyr

我希望我能解释清楚。我有一个 3 个月的每日 timeseries 数据集,其中每个 ID 都有多个 属性值。每个属性下的值存储在不同的列中。

示例数据

ID     Date     Var1    Var2
279557 1/1/2020 1       2
279557 1/2/2020 3       4
280485 1/1/2020 5       6
288785 1/2/2020 7       8

目的是聚合每个每个Var下的ID值,然后绘制timeseries每个 Var 下每个聚合 ID 的线图。

我首先想到做一个pivot long

  library(dplyr)
    library(tidyverse)
    

ID = c("297557", "279557", "280485", "280485")
Date = c("1/1/2020", "1/2/2020", "1/1/2020", "1/2/2020")
Var1 = c("1", "3", "5", "7")
Var2 = c("2", "4", "6", "8")

df = data.frame(ID, Date, Var1, Var2)

        df= df%>% 
          pivot_longer(-c(ID, Date))

输出

ID     Date     Value  
279557 1/1/2020 1 
279557 1/1/2020 2
279557 1/2/2020 3
279557 1/1/2020 4 
280485 1/1/2020 5       
280485 1/1/2020 6
280485 1/2/2020 7
280485 1/2/2020 8

现在,为了对每个 ID 下的每个 Var 值进行分组(对于 ggplot2),我正在考虑创建另一个名为的唯一 ID像素。唯一的 ID 应该是这样的,例如,对于 297557Var1 的前两个值,我可以拥有一个唯一的 ID,例如 ID1.Var1在像素列下。

Pixel     ID     Date     Value  
ID1.Var1  279557 1/1/2020 1 
ID1.Var2  279557 1/1/2020 2
ID1.Var1  279557 1/1/2020 3
ID1.Var2  279557 1/2/2020 4 
ID2.Var1  280485 1/1/2020 5       
ID2.Var2  280485 1/1/2020 6
ID2.Var1  280485 1/2/2020 7
ID2.Var2  280485 1/2/2020 8

现在我可以使用ggplot

ggplot(data = df, aes(x= Date, y=Value, group = Pixel)) +
  geom_line() + 
  xlab("") 

如何自动创建唯一的Pixel列,而无需在R中的Pixel列下手动键入每个唯一ID 使用dplyr

最佳答案

你可以试试

df %>%
  pivot_longer(-c(ID, Date)) %>%
  rowwise %>%
  mutate(Pixel = paste0(c("ID",as.integer(as.factor(ID)),".",name), collapse = "")) %>% select(-name)


  ID     Date     value Pixel   
  <chr>  <chr>    <chr> <chr>   
1 279557 1/1/2020 1     ID1.Var1
2 279557 1/1/2020 2     ID1.Var2
3 279557 1/2/2020 3     ID1.Var1
4 279557 1/2/2020 4     ID1.Var2
5 280485 1/1/2020 5     ID1.Var1
6 280485 1/1/2020 6     ID1.Var2
7 280485 1/2/2020 7     ID1.Var1
8 280485 1/2/2020 8     ID1.Var2

更新

df %>%
  pivot_longer(-c(ID, Date)) %>%
  rowwise %>%
  mutate(Pixel = paste0(c(ID,".",name), collapse = "")) %>% select(-name)

  ID     Date     value Pixel      
  <chr>  <chr>    <chr> <chr>      
1 279557 1/1/2020 1     279557.Var1
2 279557 1/1/2020 2     279557.Var2
3 279557 1/2/2020 3     279557.Var1
4 279557 1/2/2020 4     279557.Var2
5 280485 1/1/2020 5     280485.Var1
6 280485 1/1/2020 6     280485.Var2
7 280485 1/2/2020 7     280485.Var1
8 280485 1/2/2020 8     280485.Var2

关于r - 在 R 中创建唯一 ID 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69936310/

相关文章:

r - 使用 magrittr tee %T>% 运算符会产生错误

r - 反向堆积条形图

python - 使用 pydatatable 以 R 数据表的 .SDcols 样式更新或添加多列

r - R 中的 For 循环在打印中返回 NA

读取固定宽度文件中相同列的倍数

r - 从 dplyr 管道创建预测网格

删除几列中的重复值但保留行

r - tidyverse 中跨多列的字符串替换

java - REXP as List 不返回输出

r - 非典型数据格式从长转换为宽