Плавление только определенных частей / столбцов матрицы - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть матрица, и я хочу расплавить ее, основываясь на каком-то "условии".

У меня есть 2 вопроса:

1)

Я использовал make.unique(as.character(colnames(m), sep = "."), чтобы сделать имена столбцов и имена строк уникальными, однако он оставляет одну из колонок / строк как 3673_2000.1.

Как я могу сделать make.unique уникальным в начале строки? т.е. 1.3673_2000.

Данные для вопроса 1:

c("20388_1999", "730464_1999", "1224608_1999", "3370_2000", "3673_2000", 
"3673_2000.1", "40493_2000", "69970_2000", "89089_2000", "716823_2000", 
"730464_2000", "732718_2000", "746969_2000", "753308_2000", "806085_2000", 
"808450_2000", "857005_2000", "899866_2000", "920448_2000", "936340_2000")


 [1] "20388_1999"   "730464_1999"  "1224608_1999" "3370_2000"    "3673_2000"    "3673_2000.1" 
 [7] "40493_2000"   "69970_2000"   "89089_2000"   "716823_2000"  "730464_2000"  "732718_2000" 
[13] "746969_2000"  "753308_2000"  "806085_2000"  "808450_2000"  "857005_2000"  "899866_2000" 
[19] "920448_2000"  "936340_2000" 

Что подводит меня ко второму вопросу: 2)

После исправления вопроса 1 мои столбцы и строки совпадают и имеют похожую характеристику в том, что последние 4 цифры - это год. На данный момент с помощью melt_m2 <- melt(m) создается фрейм данных из 400 наблюдений 20 x 20. Я хотел бы растопить данные таким образом, чтобы создать только 15 наблюдений.

Ожидаемый результат:

       Var1     Var2     value
1  ID1_2001 ID1_2000 0.7358544
2  ID1_2002 ID1_2001 0.3965007
3  ID1_2003 ID1_2002 0.7358544
4  ID2_2001 ID2_2000 0.9663856
5  ID2_2002 ID2_2001 0.3641962
6  ID2_2003 ID2_2002 0.9663856
7  ID3_2001 ID3_2000 0.1159683
8  ID3_2002 ID3_2001 0.6635743
9  ID3_2003 ID3_2002 0.1159683
10 ID4_2001 ID4_2000 0.5124624
11 ID4_2002 ID4_2001 0.5980401
12 ID4_2003 ID4_2002 0.5124624
13 ID5_2001 ID5_2000 0.4917565
14 ID5_2002 ID5_2001 0.4330341
15 ID5_2003 ID5_2002 0.4917565

Поэтому он расплавляет данные по годам t и t-1. Первые 5 наблюдений для каждого ID 2000 выпали.

Данные

m <- matrix(runif(30), nrow = 20, ncol = 20)

dimnames(m) <- list(c(paste0("ID", 1:5, "_2000"), paste0("ID", 1:5, "_2001"), paste0("ID", 1:5, "_2002"), paste0("ID", 1:5, "_2003")),
                    c(paste0("ID", 1:5, "_2000"), paste0("ID", 1:5, "_2001"), paste0("ID", 1:5, "_2002"), paste0("ID", 1:5, "_2003")))
...