изменить форму матрицы в R и преобразовать каждые n строк в одну строку - PullRequest
0 голосов
/ 21 марта 2019

У меня есть фрейм данных df, например:

year     location
1           A
2           B
3           C
------------------
1           X
5           A
10          F
------------------
3          F
5          x
2          y

Я хотел бы изменить его на

year_1  location_1     year_2   location_2    year_3  location_3
1         A             2         B               3      F
3         C             1         X               5      X
5         A             10        F               2      Y

Я могу сделать хак и объединить первые два столбцаи сделайте

d <- matrix(df, nrow = 70, byrow = FALSE)

Но опять же, позже я должен разделить составные элементы, есть ли хороший способ сделать это?

1 Ответ

1 голос
/ 21 марта 2019

Как насчет расщепления и рекомбинации:

 wide.df <- Reduce(cbind, split(df, cumsum( rep(c(1,0,0), nrow(df)/3) ) )

Это будет иметь преимущество перед приведением к матрице и обратным приведением к информационному фрейму, так как оно не будет иметь никаких проблем с факторами или символами, которые портят классы. Использование матрицы в качестве промежуточного звена сначала потеряло бы все уровни, и если бы у вас были и персонажи, и факторы, у вас был бы действительно запутанный беспорядок.

Возможно, вам придется немного поиграть с именами столбцов, если вам нужен точный результат, и я был бы рад помочь в этом, если вы разместили копируемую [MCVE]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...