R - разделение столбца по легенде от другого - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть data.frame, как показано ниже

ID  age legend                 location     
1   83  country;province;city  X;A;J
2   15  country;city           X;K
3   2   country;province;city  Y;B;I
4   12  country;city           X;L
5   2   country;city           Y;J
6   2   country;province;city  Y;A;M
7   18  country;province;city  X;B;J
8   85  country;province;city  X;A;I

Чтобы описать это: есть третий столбец (легенда) с описанием значения четвертого столбца (местоположение).Порядок записей в столбце строк легенды указывает порядок значений в столбце местоположения.

В результате мне нужно получить data.frame как показано нижезаполните соответствующую информацию из колонки местоположения.Я не могу просто разделить столбцы;потому что в каждой строке разное количество записей.Любое предложение?

1 Ответ

0 голосов
/ 26 февраля 2019

Используя DF, который воспроизводимо показан в примечании, в конце используйте separate_rows, а затем spread данные из длинных в широкие.Если порядок столбцов не имеет значения, то строка select может быть опущена.

library(dplyr)
library(tidyr)

DF %>% 
  separate_rows(legend, location) %>% 
  spread(legend, location) %>%
  select(ID, age, country, province, city) # optional

, что дает:

  ID age country province city
1  1  83       X        A    J
2  2  15       X     <NA>    K
3  3   2       Y        B    I
4  4  12       X     <NA>    L
5  5   2       Y     <NA>    J
6  6   2       Y        A    M
7  7  18       X        B    J
8  8  85       X        A    I

Примечание

Lines <- "
ID  age legend                 location     
1   83  country;province;city  X;A;J
2   15  country;city           X;K
3   2   country;province;city  Y;B;I
4   12  country;city           X;L
5   2   country;city           Y;J
6   2   country;province;city  Y;A;M
7   18  country;province;city  X;B;J
8   85  country;province;city  X;A;I"
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...