2015-10-31 3 views
1

Я использую R и с кадром данных, который имеет данные для разных лет и разных стран (числовые) Мне нужно разбить его и переставить их в различные списки (9col и 22Rows) по стране и годам (xколоны). Я представил его в .xls, поскольку это было проще для объяснения. Или, по крайней мере, я так надеюсь! Это выдержка из набора данных. есть rowRef и colRef, которые должны указывать позицию, в которой данные должны идти в списке.Сплит и переформатирование кадра данных в списке с использованием R

здесь пример данных кадра
ColRef <- c(rep(1,6), rep(2,4),rep(5,4),rep(7,7),rep(9,3)) RowRef <- c(1:3,8,19,22,1:3,8,1:3,8,1:3,15,8,19,22,1:3) country <- c(rep(2,19),rep(4,5)) X2007 <- c(986,421,33,2,NA,NA,653,355,90,1,NA,NA,NA,NA,16,6,0,0,3,NA,NA,1650,777,123) X2008 <- c(1092,376,44,1,NA,NA,3581,289,95,1,NA,NA,NA,NA,17,4,0,NA,5,NA,NA,4667,666,139) X2009 <- c(1307,346,71,2,NA,NA,3182,301,121,3,NA,NA,NA,NA,26,12,0,0,9,NA,NA,4499,647,192) X2010 <- c(1536,348,56,1,NA,NA,4441,718,224,7,NA,NA,NA,NA,24,10,0,NA,0,NA,NA,5991,1069,281) DataMix <- data.frame(ColRef,RowRef, country, X2007, X2008,X2009,X2010)

enter image description here

И ниже является представление желаемого результата -> список с различными списками, каждая из которых (9colx22rows) для каждой страны и для каждого год. Число, в котором RefCol 1 и RefRow 1 стали первым элементом и т. Д., Столбец с именем x2007 ... и т. Д. - это разные годы.

Если бы кто-нибудь мог сказать мне, как это сделать в R, я был бы очень благодарен, поскольку я борюсь, не достигнув никакого результата! Я искал решение, но я не мог его найти. Возможно, у меня неправильный подход и ключевые слова. Спасибо

country 2 year 2007

country 2 year 2008

country 4 year 2007

+1

Pls делится вашими данными так, чтобы мы могли их использовать. Скриншоты бесполезны в этом контексте. Было бы также полезно, если бы вы могли дать нам код, который вы пытались до сих пор. – vaettchen

+0

Посмотрите на пакет с изменением формы. В частности, функция «cast». – kliron

+0

@vaettchen - Я очень хорошо понимаю, что скриншоты бесполезны, Извините за это. Данные поступали из разных таблиц csv, вместе взятых, и мне было сложно воссоздать их с кодом. Мне удалось разбить таблицы для каждой страны, с DataMixC <- split (DataMix, с (DataMix, взаимодействие (Страна)), drop = TRUE), но у меня такое впечатление, что я ошибаюсь. Это должно быть сделано после .. – AnnePauline

ответ

1

Я обновил свой ответ, основанный на наборе данных вы предоставили. Обратите внимание, что я все еще называю это dt, а столбец Country имеет столицу «C».

library(dplyr) 
library(tidyr) 

ColRef <- c(rep(1,6), rep(2,4),rep(5,4),rep(7,7),rep(9,3)) 
RowRef <- c(1:3,8,19,22,1:3,8,1:3,8,1:3,15,8,19,22,1:3) 
Country <- c(rep(2,19),rep(4,5)) 
X2007 <- c(986,421,33,2,NA,NA,653,355,90,1,NA,NA,NA,NA,16,6,0,0,3,NA,NA,1650,777,123) 
X2008 <- c(1092,376,44,1,NA,NA,3581,289,95,1,NA,NA,NA,NA,17,4,0,NA,5,NA,NA,4667,666,139) 
X2009 <- c(1307,346,71,2,NA,NA,3182,301,121,3,NA,NA,NA,NA,26,12,0,0,9,NA,NA,4499,647,192) 
X2010 <- c(1536,348,56,1,NA,NA,4441,718,224,7,NA,NA,NA,NA,24,10,0,NA,0,NA,NA,5991,1069,281) 
dt <- data.frame(ColRef,RowRef, Country, X2007, X2008,X2009,X2010) 

dt 

# ColRef RowRef Country X2007 X2008 X2009 X2010 
# 1  1  1  2 986 1092 1307 1536 
# 2  1  2  2 421 376 346 348 
# 3  1  3  2 33 44 71 56 
# 4  1  8  2  2  1  2  1 
# 5  1  19  2 NA NA NA NA 
# 6  1  22  2 NA NA NA NA 
# 7  2  1  2 653 3581 3182 4441 
# 8  2  2  2 355 289 301 718 
# 9  2  3  2 90 95 121 224 
# 10  2  8  2  1  1  3  7 
# 11  5  1  2 NA NA NA NA 
# 12  5  2  2 NA NA NA NA 
# 13  5  3  2 NA NA NA NA 
# 14  5  8  2 NA NA NA NA 
# 15  7  1  2 16 17 26 24 
# 16  7  2  2  6  4 12 10 
# 17  7  3  2  0  0  0  0 
# 18  7  15  2  0 NA  0 NA 
# 19  7  8  2  3  5  9  0 
# 20  7  19  4 NA NA NA NA 
# 21  7  22  4 NA NA NA NA 
# 22  9  1  4 1650 4667 4499 5991 
# 23  9  2  4 777 666 647 1069 
# 24  9  3  4 123 139 192 281 


# create vector of unique countries and X columns 
Country_vector = unique(dt$Country) 
X_vector = dt %>% select(matches("X")) %>% names() 

# create a list to store results 
List_res = list() 

# starting point of list element counter 
n = 1 

for (i in Country_vector) { # i is the countries 
    for (j in X_vector) { # j is the X columns 

    # keep appropriate rows and columns 
    dt_test = 
     dt %>% 
     filter(Country == i) %>% 
     select(ColRef, RowRef, matches(j)) 

    # create all possible combinations of ColRef and RowRef 
    dt_test2 = 
     expand.grid(ColRef = seq(min(dt$ColRef), max(dt$ColRef)), 
        RowRef = seq(min(dt$RowRef), max(dt$RowRef))) %>% 
     left_join(dt_test, by=c("ColRef","RowRef")) # join your actual values 

    # rename your X column so you can handle it no matter what your input is 
    names(dt_test2)[3] = "X" 

    # replace NA values with zeros 
    dt_test2[,"X"] = ifelse(is.na(dt_test2[,"X"]), 0, dt_test2[,"X"]) 

    # reshape dataset 
    dt_test2 %>% 
     spread(ColRef, X) -> List_res[[n]] 

    # set the name of that element based on specific country and X column (at this iteration) 
    names(List_res)[n] = paste(i,j) 

    # get ready for next element and next iteration 
    n = n+1 
    } 
} 


# check results 
List_res 

# $`2 X2007` 
# RowRef 1 2 3 4 5 6 7 8 9 
# 1  1 986 653 0 0 0 0 16 0 0 
# 2  2 421 355 0 0 0 0 6 0 0 
# 3  3 33 90 0 0 0 0 0 0 0 
# 4  4 0 0 0 0 0 0 0 0 0 
# 5  5 0 0 0 0 0 0 0 0 0 
# 6  6 0 0 0 0 0 0 0 0 0 
# 7  7 0 0 0 0 0 0 0 0 0 
# 8  8 2 1 0 0 0 0 3 0 0 
# 9  9 0 0 0 0 0 0 0 0 0 
# 10  10 0 0 0 0 0 0 0 0 0 
# 11  11 0 0 0 0 0 0 0 0 0 
# 12  12 0 0 0 0 0 0 0 0 0 
# 13  13 0 0 0 0 0 0 0 0 0 
# 14  14 0 0 0 0 0 0 0 0 0 
# 15  15 0 0 0 0 0 0 0 0 0 
# 16  16 0 0 0 0 0 0 0 0 0 
# 17  17 0 0 0 0 0 0 0 0 0 
# 18  18 0 0 0 0 0 0 0 0 0 
# 19  19 0 0 0 0 0 0 0 0 0 
# 20  20 0 0 0 0 0 0 0 0 0 
# 21  21 0 0 0 0 0 0 0 0 0 
# 22  22 0 0 0 0 0 0 0 0 0 
# 
# $`2 X2008` 
# RowRef 1 2 3 4 5 6 7 8 9 
# 1  1 1092 3581 0 0 0 0 17 0 0 
# 2  2 376 289 0 0 0 0 4 0 0 
# 3  3 44 95 0 0 0 0 0 0 0 
# 4  4 0 0 0 0 0 0 0 0 0 
# 5  5 0 0 0 0 0 0 0 0 0 
# 6  6 0 0 0 0 0 0 0 0 0 
# 7  7 0 0 0 0 0 0 0 0 0 
# 8  8 1 1 0 0 0 0 5 0 0 
# 9  9 0 0 0 0 0 0 0 0 0 
# 10  10 0 0 0 0 0 0 0 0 0 
# 11  11 0 0 0 0 0 0 0 0 0 
# 12  12 0 0 0 0 0 0 0 0 0 
# 13  13 0 0 0 0 0 0 0 0 0 
# 14  14 0 0 0 0 0 0 0 0 0 
# 15  15 0 0 0 0 0 0 0 0 0 
# 16  16 0 0 0 0 0 0 0 0 0 
# 17  17 0 0 0 0 0 0 0 0 0 
# 18  18 0 0 0 0 0 0 0 0 0 
# 19  19 0 0 0 0 0 0 0 0 0 
# 20  20 0 0 0 0 0 0 0 0 0 
# 21  21 0 0 0 0 0 0 0 0 0 
# 22  22 0 0 0 0 0 0 0 0 0 
# 
# $`2 X2009` 
# RowRef 1 2 3 4 5 6 7 8 9 
# 1  1 1307 3182 0 0 0 0 26 0 0 
# 2  2 346 301 0 0 0 0 12 0 0 
# 3  3 71 121 0 0 0 0 0 0 0 
# 4  4 0 0 0 0 0 0 0 0 0 
# 5  5 0 0 0 0 0 0 0 0 0 
# 6  6 0 0 0 0 0 0 0 0 0 
# 7  7 0 0 0 0 0 0 0 0 0 
# 8  8 2 3 0 0 0 0 9 0 0 
# 9  9 0 0 0 0 0 0 0 0 0 
# 10  10 0 0 0 0 0 0 0 0 0 
# 11  11 0 0 0 0 0 0 0 0 0 
# 12  12 0 0 0 0 0 0 0 0 0 
# 13  13 0 0 0 0 0 0 0 0 0 
# 14  14 0 0 0 0 0 0 0 0 0 
# 15  15 0 0 0 0 0 0 0 0 0 
# 16  16 0 0 0 0 0 0 0 0 0 
# 17  17 0 0 0 0 0 0 0 0 0 
# 18  18 0 0 0 0 0 0 0 0 0 
# 19  19 0 0 0 0 0 0 0 0 0 
# 20  20 0 0 0 0 0 0 0 0 0 
# 21  21 0 0 0 0 0 0 0 0 0 
# 22  22 0 0 0 0 0 0 0 0 0 
# 
# $`2 X2010` 
# RowRef 1 2 3 4 5 6 7 8 9 
# 1  1 1536 4441 0 0 0 0 24 0 0 
# 2  2 348 718 0 0 0 0 10 0 0 
# 3  3 56 224 0 0 0 0 0 0 0 
# 4  4 0 0 0 0 0 0 0 0 0 
# 5  5 0 0 0 0 0 0 0 0 0 
# 6  6 0 0 0 0 0 0 0 0 0 
# 7  7 0 0 0 0 0 0 0 0 0 
# 8  8 1 7 0 0 0 0 0 0 0 
# 9  9 0 0 0 0 0 0 0 0 0 
# 10  10 0 0 0 0 0 0 0 0 0 
# 11  11 0 0 0 0 0 0 0 0 0 
# 12  12 0 0 0 0 0 0 0 0 0 
# 13  13 0 0 0 0 0 0 0 0 0 
# 14  14 0 0 0 0 0 0 0 0 0 
# 15  15 0 0 0 0 0 0 0 0 0 
# 16  16 0 0 0 0 0 0 0 0 0 
# 17  17 0 0 0 0 0 0 0 0 0 
# 18  18 0 0 0 0 0 0 0 0 0 
# 19  19 0 0 0 0 0 0 0 0 0 
# 20  20 0 0 0 0 0 0 0 0 0 
# 21  21 0 0 0 0 0 0 0 0 0 
# 22  22 0 0 0 0 0 0 0 0 0 
# 
# $`4 X2007` 
# RowRef 1 2 3 4 5 6 7 8 9 
# 1  1 0 0 0 0 0 0 0 0 1650 
# 2  2 0 0 0 0 0 0 0 0 777 
# 3  3 0 0 0 0 0 0 0 0 123 
# 4  4 0 0 0 0 0 0 0 0 0 
# 5  5 0 0 0 0 0 0 0 0 0 
# 6  6 0 0 0 0 0 0 0 0 0 
# 7  7 0 0 0 0 0 0 0 0 0 
# 8  8 0 0 0 0 0 0 0 0 0 
# 9  9 0 0 0 0 0 0 0 0 0 
# 10  10 0 0 0 0 0 0 0 0 0 
# 11  11 0 0 0 0 0 0 0 0 0 
# 12  12 0 0 0 0 0 0 0 0 0 
# 13  13 0 0 0 0 0 0 0 0 0 
# 14  14 0 0 0 0 0 0 0 0 0 
# 15  15 0 0 0 0 0 0 0 0 0 
# 16  16 0 0 0 0 0 0 0 0 0 
# 17  17 0 0 0 0 0 0 0 0 0 
# 18  18 0 0 0 0 0 0 0 0 0 
# 19  19 0 0 0 0 0 0 0 0 0 
# 20  20 0 0 0 0 0 0 0 0 0 
# 21  21 0 0 0 0 0 0 0 0 0 
# 22  22 0 0 0 0 0 0 0 0 0 
# 
# $`4 X2008` 
# RowRef 1 2 3 4 5 6 7 8 9 
# 1  1 0 0 0 0 0 0 0 0 4667 
# 2  2 0 0 0 0 0 0 0 0 666 
# 3  3 0 0 0 0 0 0 0 0 139 
# 4  4 0 0 0 0 0 0 0 0 0 
# 5  5 0 0 0 0 0 0 0 0 0 
# 6  6 0 0 0 0 0 0 0 0 0 
# 7  7 0 0 0 0 0 0 0 0 0 
# 8  8 0 0 0 0 0 0 0 0 0 
# 9  9 0 0 0 0 0 0 0 0 0 
# 10  10 0 0 0 0 0 0 0 0 0 
# 11  11 0 0 0 0 0 0 0 0 0 
# 12  12 0 0 0 0 0 0 0 0 0 
# 13  13 0 0 0 0 0 0 0 0 0 
# 14  14 0 0 0 0 0 0 0 0 0 
# 15  15 0 0 0 0 0 0 0 0 0 
# 16  16 0 0 0 0 0 0 0 0 0 
# 17  17 0 0 0 0 0 0 0 0 0 
# 18  18 0 0 0 0 0 0 0 0 0 
# 19  19 0 0 0 0 0 0 0 0 0 
# 20  20 0 0 0 0 0 0 0 0 0 
# 21  21 0 0 0 0 0 0 0 0 0 
# 22  22 0 0 0 0 0 0 0 0 0 
# 
# $`4 X2009` 
# RowRef 1 2 3 4 5 6 7 8 9 
# 1  1 0 0 0 0 0 0 0 0 4499 
# 2  2 0 0 0 0 0 0 0 0 647 
# 3  3 0 0 0 0 0 0 0 0 192 
# 4  4 0 0 0 0 0 0 0 0 0 
# 5  5 0 0 0 0 0 0 0 0 0 
# 6  6 0 0 0 0 0 0 0 0 0 
# 7  7 0 0 0 0 0 0 0 0 0 
# 8  8 0 0 0 0 0 0 0 0 0 
# 9  9 0 0 0 0 0 0 0 0 0 
# 10  10 0 0 0 0 0 0 0 0 0 
# 11  11 0 0 0 0 0 0 0 0 0 
# 12  12 0 0 0 0 0 0 0 0 0 
# 13  13 0 0 0 0 0 0 0 0 0 
# 14  14 0 0 0 0 0 0 0 0 0 
# 15  15 0 0 0 0 0 0 0 0 0 
# 16  16 0 0 0 0 0 0 0 0 0 
# 17  17 0 0 0 0 0 0 0 0 0 
# 18  18 0 0 0 0 0 0 0 0 0 
# 19  19 0 0 0 0 0 0 0 0 0 
# 20  20 0 0 0 0 0 0 0 0 0 
# 21  21 0 0 0 0 0 0 0 0 0 
# 22  22 0 0 0 0 0 0 0 0 0 
# 
# $`4 X2010` 
# RowRef 1 2 3 4 5 6 7 8 9 
# 1  1 0 0 0 0 0 0 0 0 5991 
# 2  2 0 0 0 0 0 0 0 0 1069 
# 3  3 0 0 0 0 0 0 0 0 281 
# 4  4 0 0 0 0 0 0 0 0 0 
# 5  5 0 0 0 0 0 0 0 0 0 
# 6  6 0 0 0 0 0 0 0 0 0 
# 7  7 0 0 0 0 0 0 0 0 0 
# 8  8 0 0 0 0 0 0 0 0 0 
# 9  9 0 0 0 0 0 0 0 0 0 
# 10  10 0 0 0 0 0 0 0 0 0 
# 11  11 0 0 0 0 0 0 0 0 0 
# 12  12 0 0 0 0 0 0 0 0 0 
# 13  13 0 0 0 0 0 0 0 0 0 
# 14  14 0 0 0 0 0 0 0 0 0 
# 15  15 0 0 0 0 0 0 0 0 0 
# 16  16 0 0 0 0 0 0 0 0 0 
# 17  17 0 0 0 0 0 0 0 0 0 
# 18  18 0 0 0 0 0 0 0 0 0 
# 19  19 0 0 0 0 0 0 0 0 0 
# 20  20 0 0 0 0 0 0 0 0 0 
# 21  21 0 0 0 0 0 0 0 0 0 
# 22  22 0 0 0 0 0 0 0 0 0 

Я добавляю еще один подход, который дает тот же результат, а не в отдельных списках, но в большой кадр данных с 2-мя ключевыми столбцами Country и X, а также не нужно использовать цикл (не являющийся поклонником петель лично).

library(dplyr) 
library(tidyr) 

ColRef <- c(rep(1,6), rep(2,4),rep(5,4),rep(7,7),rep(9,3)) 
RowRef <- c(1:3,8,19,22,1:3,8,1:3,8,1:3,15,8,19,22,1:3) 
Country <- c(rep(2,19),rep(4,5)) 
X2007 <- c(986,421,33,2,NA,NA,653,355,90,1,NA,NA,NA,NA,16,6,0,0,3,NA,NA,1650,777,123) 
X2008 <- c(1092,376,44,1,NA,NA,3581,289,95,1,NA,NA,NA,NA,17,4,0,NA,5,NA,NA,4667,666,139) 
X2009 <- c(1307,346,71,2,NA,NA,3182,301,121,3,NA,NA,NA,NA,26,12,0,0,9,NA,NA,4499,647,192) 
X2010 <- c(1536,348,56,1,NA,NA,4441,718,224,7,NA,NA,NA,NA,24,10,0,NA,0,NA,NA,5991,1069,281) 
dt <- data.frame(ColRef,RowRef, Country, X2007, X2008,X2009,X2010) 

# reshape dataset 
dt2 = dt %>% gather(X,value,X2007:X2010) 

# function 
ff = function(i,j){ 
    expand.grid(ColRef = seq(min(dt$ColRef), max(dt$ColRef)), 
       RowRef = seq(min(dt$RowRef), max(dt$RowRef))) %>% 
    left_join(dt2[dt2$Country==i & dt2$X==j,], by=c("ColRef","RowRef")) %>% 
    select(-Country, -X) %>% 
    spread(ColRef, value)} 

# create all combinations between country and X values and apply the function 
expand.grid(Country = unique(dt2$Country), 
      X = unique(dt2$X)) %>% 
    group_by(Country, X) %>% 
    do(ff(.$Country, .$X)) %>% 
    ungroup() %>%  ## don't really need it if you don't mind keeping the grouping 
    print(n = nrow(.)) ## needed only to view/print all rows 

# Source: local data frame [176 x 12] 
# 
#  Country  X RowRef  1  2  3  4  5  6  7  8  9 
#  (dbl) (fctr) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) 
# 1   2 X2007  1 986 653 NA NA NA NA 16 NA NA 
# 2   2 X2007  2 421 355 NA NA NA NA  6 NA NA 
# 3   2 X2007  3 33 90 NA NA NA NA  0 NA NA 
# 4   2 X2007  4 NA NA NA NA NA NA NA NA NA 
# 5   2 X2007  5 NA NA NA NA NA NA NA NA NA 
# 6   2 X2007  6 NA NA NA NA NA NA NA NA NA 
# 7   2 X2007  7 NA NA NA NA NA NA NA NA NA 
# 8   2 X2007  8  2  1 NA NA NA NA  3 NA NA 
# 9   2 X2007  9 NA NA NA NA NA NA NA NA NA 
# 10  2 X2007  10 NA NA NA NA NA NA NA NA NA 
# 11  2 X2007  11 NA NA NA NA NA NA NA NA NA 
# 12  2 X2007  12 NA NA NA NA NA NA NA NA NA 
# 13  2 X2007  13 NA NA NA NA NA NA NA NA NA 
# 14  2 X2007  14 NA NA NA NA NA NA NA NA NA 
# 15  2 X2007  15 NA NA NA NA NA NA  0 NA NA 
# 16  2 X2007  16 NA NA NA NA NA NA NA NA NA 
# 17  2 X2007  17 NA NA NA NA NA NA NA NA NA 
# 18  2 X2007  18 NA NA NA NA NA NA NA NA NA 
# 19  2 X2007  19 NA NA NA NA NA NA NA NA NA 
# 20  2 X2007  20 NA NA NA NA NA NA NA NA NA 
# 21  2 X2007  21 NA NA NA NA NA NA NA NA NA 
# 22  2 X2007  22 NA NA NA NA NA NA NA NA NA 
# 23  2 X2008  1 1092 3581 NA NA NA NA 17 NA NA 
# 24  2 X2008  2 376 289 NA NA NA NA  4 NA NA 
# 25  2 X2008  3 44 95 NA NA NA NA  0 NA NA 
# 26  2 X2008  4 NA NA NA NA NA NA NA NA NA 
# 27  2 X2008  5 NA NA NA NA NA NA NA NA NA 
# 28  2 X2008  6 NA NA NA NA NA NA NA NA NA 
# 29  2 X2008  7 NA NA NA NA NA NA NA NA NA 
# 30  2 X2008  8  1  1 NA NA NA NA  5 NA NA 
# 31  2 X2008  9 NA NA NA NA NA NA NA NA NA 
# 32  2 X2008  10 NA NA NA NA NA NA NA NA NA 
# 33  2 X2008  11 NA NA NA NA NA NA NA NA NA 
# 34  2 X2008  12 NA NA NA NA NA NA NA NA NA 
# 35  2 X2008  13 NA NA NA NA NA NA NA NA NA 
# 36  2 X2008  14 NA NA NA NA NA NA NA NA NA 
# 37  2 X2008  15 NA NA NA NA NA NA NA NA NA 
# 38  2 X2008  16 NA NA NA NA NA NA NA NA NA 
# 39  2 X2008  17 NA NA NA NA NA NA NA NA NA 
# 40  2 X2008  18 NA NA NA NA NA NA NA NA NA 
# 41  2 X2008  19 NA NA NA NA NA NA NA NA NA 
# 42  2 X2008  20 NA NA NA NA NA NA NA NA NA 
# 43  2 X2008  21 NA NA NA NA NA NA NA NA NA 
# 44  2 X2008  22 NA NA NA NA NA NA NA NA NA 
# 45  2 X2009  1 1307 3182 NA NA NA NA 26 NA NA 
# 46  2 X2009  2 346 301 NA NA NA NA 12 NA NA 
# 47  2 X2009  3 71 121 NA NA NA NA  0 NA NA 
# 48  2 X2009  4 NA NA NA NA NA NA NA NA NA 
# 49  2 X2009  5 NA NA NA NA NA NA NA NA NA 
# 50  2 X2009  6 NA NA NA NA NA NA NA NA NA 
# 51  2 X2009  7 NA NA NA NA NA NA NA NA NA 
# 52  2 X2009  8  2  3 NA NA NA NA  9 NA NA 
# 53  2 X2009  9 NA NA NA NA NA NA NA NA NA 
# 54  2 X2009  10 NA NA NA NA NA NA NA NA NA 
# 55  2 X2009  11 NA NA NA NA NA NA NA NA NA 
# 56  2 X2009  12 NA NA NA NA NA NA NA NA NA 
# 57  2 X2009  13 NA NA NA NA NA NA NA NA NA 
# 58  2 X2009  14 NA NA NA NA NA NA NA NA NA 
# 59  2 X2009  15 NA NA NA NA NA NA  0 NA NA 
# 60  2 X2009  16 NA NA NA NA NA NA NA NA NA 
# 61  2 X2009  17 NA NA NA NA NA NA NA NA NA 
# 62  2 X2009  18 NA NA NA NA NA NA NA NA NA 
# 63  2 X2009  19 NA NA NA NA NA NA NA NA NA 
# 64  2 X2009  20 NA NA NA NA NA NA NA NA NA 
# 65  2 X2009  21 NA NA NA NA NA NA NA NA NA 
# 66  2 X2009  22 NA NA NA NA NA NA NA NA NA 
# 67  2 X2010  1 1536 4441 NA NA NA NA 24 NA NA 
# 68  2 X2010  2 348 718 NA NA NA NA 10 NA NA 
# 69  2 X2010  3 56 224 NA NA NA NA  0 NA NA 
# 70  2 X2010  4 NA NA NA NA NA NA NA NA NA 
# 71  2 X2010  5 NA NA NA NA NA NA NA NA NA 
# 72  2 X2010  6 NA NA NA NA NA NA NA NA NA 
# 73  2 X2010  7 NA NA NA NA NA NA NA NA NA 
# 74  2 X2010  8  1  7 NA NA NA NA  0 NA NA 
# 75  2 X2010  9 NA NA NA NA NA NA NA NA NA 
# 76  2 X2010  10 NA NA NA NA NA NA NA NA NA 
# 77  2 X2010  11 NA NA NA NA NA NA NA NA NA 
# 78  2 X2010  12 NA NA NA NA NA NA NA NA NA 
# 79  2 X2010  13 NA NA NA NA NA NA NA NA NA 
# 80  2 X2010  14 NA NA NA NA NA NA NA NA NA 
# 81  2 X2010  15 NA NA NA NA NA NA NA NA NA 
# 82  2 X2010  16 NA NA NA NA NA NA NA NA NA 
# 83  2 X2010  17 NA NA NA NA NA NA NA NA NA 
# 84  2 X2010  18 NA NA NA NA NA NA NA NA NA 
# 85  2 X2010  19 NA NA NA NA NA NA NA NA NA 
# 86  2 X2010  20 NA NA NA NA NA NA NA NA NA 
# 87  2 X2010  21 NA NA NA NA NA NA NA NA NA 
# 88  2 X2010  22 NA NA NA NA NA NA NA NA NA 
# 89  4 X2007  1 NA NA NA NA NA NA NA NA 1650 
# 90  4 X2007  2 NA NA NA NA NA NA NA NA 777 
# 91  4 X2007  3 NA NA NA NA NA NA NA NA 123 
# 92  4 X2007  4 NA NA NA NA NA NA NA NA NA 
# 93  4 X2007  5 NA NA NA NA NA NA NA NA NA 
# 94  4 X2007  6 NA NA NA NA NA NA NA NA NA 
# 95  4 X2007  7 NA NA NA NA NA NA NA NA NA 
# 96  4 X2007  8 NA NA NA NA NA NA NA NA NA 
# 97  4 X2007  9 NA NA NA NA NA NA NA NA NA 
# 98  4 X2007  10 NA NA NA NA NA NA NA NA NA 
# 99  4 X2007  11 NA NA NA NA NA NA NA NA NA 
# 100  4 X2007  12 NA NA NA NA NA NA NA NA NA 
# 101  4 X2007  13 NA NA NA NA NA NA NA NA NA 
# 102  4 X2007  14 NA NA NA NA NA NA NA NA NA 
# 103  4 X2007  15 NA NA NA NA NA NA NA NA NA 
# 104  4 X2007  16 NA NA NA NA NA NA NA NA NA 
# 105  4 X2007  17 NA NA NA NA NA NA NA NA NA 
# 106  4 X2007  18 NA NA NA NA NA NA NA NA NA 
# 107  4 X2007  19 NA NA NA NA NA NA NA NA NA 
# 108  4 X2007  20 NA NA NA NA NA NA NA NA NA 
# 109  4 X2007  21 NA NA NA NA NA NA NA NA NA 
# 110  4 X2007  22 NA NA NA NA NA NA NA NA NA 
# 111  4 X2008  1 NA NA NA NA NA NA NA NA 4667 
# 112  4 X2008  2 NA NA NA NA NA NA NA NA 666 
# 113  4 X2008  3 NA NA NA NA NA NA NA NA 139 
# 114  4 X2008  4 NA NA NA NA NA NA NA NA NA 
# 115  4 X2008  5 NA NA NA NA NA NA NA NA NA 
# 116  4 X2008  6 NA NA NA NA NA NA NA NA NA 
# 117  4 X2008  7 NA NA NA NA NA NA NA NA NA 
# 118  4 X2008  8 NA NA NA NA NA NA NA NA NA 
# 119  4 X2008  9 NA NA NA NA NA NA NA NA NA 
# 120  4 X2008  10 NA NA NA NA NA NA NA NA NA 
# 121  4 X2008  11 NA NA NA NA NA NA NA NA NA 
# 122  4 X2008  12 NA NA NA NA NA NA NA NA NA 
# 123  4 X2008  13 NA NA NA NA NA NA NA NA NA 
# 124  4 X2008  14 NA NA NA NA NA NA NA NA NA 
# 125  4 X2008  15 NA NA NA NA NA NA NA NA NA 
# 126  4 X2008  16 NA NA NA NA NA NA NA NA NA 
# 127  4 X2008  17 NA NA NA NA NA NA NA NA NA 
# 128  4 X2008  18 NA NA NA NA NA NA NA NA NA 
# 129  4 X2008  19 NA NA NA NA NA NA NA NA NA 
# 130  4 X2008  20 NA NA NA NA NA NA NA NA NA 
# 131  4 X2008  21 NA NA NA NA NA NA NA NA NA 
# 132  4 X2008  22 NA NA NA NA NA NA NA NA NA 
# 133  4 X2009  1 NA NA NA NA NA NA NA NA 4499 
# 134  4 X2009  2 NA NA NA NA NA NA NA NA 647 
# 135  4 X2009  3 NA NA NA NA NA NA NA NA 192 
# 136  4 X2009  4 NA NA NA NA NA NA NA NA NA 
# 137  4 X2009  5 NA NA NA NA NA NA NA NA NA 
# 138  4 X2009  6 NA NA NA NA NA NA NA NA NA 
# 139  4 X2009  7 NA NA NA NA NA NA NA NA NA 
# 140  4 X2009  8 NA NA NA NA NA NA NA NA NA 
# 141  4 X2009  9 NA NA NA NA NA NA NA NA NA 
# 142  4 X2009  10 NA NA NA NA NA NA NA NA NA 
# 143  4 X2009  11 NA NA NA NA NA NA NA NA NA 
# 144  4 X2009  12 NA NA NA NA NA NA NA NA NA 
# 145  4 X2009  13 NA NA NA NA NA NA NA NA NA 
# 146  4 X2009  14 NA NA NA NA NA NA NA NA NA 
# 147  4 X2009  15 NA NA NA NA NA NA NA NA NA 
# 148  4 X2009  16 NA NA NA NA NA NA NA NA NA 
# 149  4 X2009  17 NA NA NA NA NA NA NA NA NA 
# 150  4 X2009  18 NA NA NA NA NA NA NA NA NA 
# 151  4 X2009  19 NA NA NA NA NA NA NA NA NA 
# 152  4 X2009  20 NA NA NA NA NA NA NA NA NA 
# 153  4 X2009  21 NA NA NA NA NA NA NA NA NA 
# 154  4 X2009  22 NA NA NA NA NA NA NA NA NA 
# 155  4 X2010  1 NA NA NA NA NA NA NA NA 5991 
# 156  4 X2010  2 NA NA NA NA NA NA NA NA 1069 
# 157  4 X2010  3 NA NA NA NA NA NA NA NA 281 
# 158  4 X2010  4 NA NA NA NA NA NA NA NA NA 
# 159  4 X2010  5 NA NA NA NA NA NA NA NA NA 
# 160  4 X2010  6 NA NA NA NA NA NA NA NA NA 
# 161  4 X2010  7 NA NA NA NA NA NA NA NA NA 
# 162  4 X2010  8 NA NA NA NA NA NA NA NA NA 
# 163  4 X2010  9 NA NA NA NA NA NA NA NA NA 
# 164  4 X2010  10 NA NA NA NA NA NA NA NA NA 
# 165  4 X2010  11 NA NA NA NA NA NA NA NA NA 
# 166  4 X2010  12 NA NA NA NA NA NA NA NA NA 
# 167  4 X2010  13 NA NA NA NA NA NA NA NA NA 
# 168  4 X2010  14 NA NA NA NA NA NA NA NA NA 
# 169  4 X2010  15 NA NA NA NA NA NA NA NA NA 
# 170  4 X2010  16 NA NA NA NA NA NA NA NA NA 
# 171  4 X2010  17 NA NA NA NA NA NA NA NA NA 
# 172  4 X2010  18 NA NA NA NA NA NA NA NA NA 
# 173  4 X2010  19 NA NA NA NA NA NA NA NA NA 
# 174  4 X2010  20 NA NA NA NA NA NA NA NA NA 
# 175  4 X2010  21 NA NA NA NA NA NA NA NA NA 
# 176  4 X2010  22 NA NA NA NA NA NA NA NA NA 

Таким образом, вы можете видеть, что если вы выбираете Country = 2 и X = X2007 у вас есть подмножество, которое является таким же, как вашим первым список (ранее) и т.д.

+0

Большое спасибо, я проверю его по большим данным. Если это сработает, вы меня в безопасности! В любом случае вы дали мне свет! – AnnePauline

+0

Отлично. Если он работает, мы можем улучшить его. – AntoniosK

+0

Это еще лучше, так как мне нужно использовать I как страну – AnnePauline

0

Другим решения без каких-либо внешних библиотек.

L <- list() 
countries <- unique(DataMix$country) 

for (c in countries) { 
    ## Data for this country 
    df <- DataMix[country == c, ] 
    ## Order the data by RowRef and ColRef, ascending 
    df <- df[order(df$RowRef, df$ColRef),] 

    ## For each year... 
    for (y in 4:7) { 
     ## ...create a data frame to hold the data for this year and this country. 
     res <- data.frame(matrix(NA, nrow = 22, ncol = 9)) 
     names(res) <- paste("c", 1:9, sep="") 

     for (r in unique(df$RowRef)) { 
      ## extract the data for this RowRef 
      rowData <- df[df$RowRef == r, c(1, y)]  
      ## Copy the data under the right column 
      for (col in rowData$ColRef) {     
       res[r, paste("c", col, sep="")] <- rowData[rowData$ColRef == col, 2] 
      } 
     } 
     ## Add to the list 
     L[[paste("country", c, colnames(df)[y], sep=".")]] <- res 
    } 
} 

Обратите внимание, что вам не нужен отдельный столбец для RowRef в новых кадрах, просто использовать rownames(), чтобы получить ссылку строки в виде строки. Тем не менее, если вам это нужно в качестве столбца, вы можете легко добавить его в основной цикл.

+0

Мне очень нравится чистый и простой сценарий, спасибо! но, к сожалению, когда я это пробовал, он не помещал значения в нужные ячейки. Напр. страна 2 в 2010 году; цвет 2 строки 1,2,3 должны быть 4441, 719, 224; и это не так, и есть некоторые другие несоответствия. Странно для страны 4 все хорошо. У вас есть идея, что произошло? – AnnePauline

+0

@AnnePauline Извините за это - я отредактировал сценарий. Это то, что тебе надо? – kliron

Смежные вопросы