У меня есть матрица, и я хочу расплавить ее, основываясь на каком-то "условии".
У меня есть 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")))