изменить форму или dcast длинный в широкий без значения .var 2 столбца - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть data.frame df с 2 столбцами, здесь показаны первые шесть строк, но у него гораздо больше последовательностей блоков, каждая из которых охватывает 3 строки:

blocksequenceid description
M049-S215-S085 ECDTM-49
M049-S215-S085 ICD-215 
M049-S215-S085 ICD-85
M049-S213-S044 ECDTM-49
M049-S213-S044 ICD-213
M049-S213-S044 ICD-44

Я хочу преобразовать его в этот формат:

blocksequenceid description1 description2 description3 
M049-S215-S085 ECDTM-49 ICD-215 ICD-85
M049-S213-S044 ECDTM-49 ICD-213 ICD-44

Я думал о dcast и изменении формы, но я не знаю, что делать, когда там написано ERROR: column time not found для изменения формы, и я не уверен, что dcast является подходящей функцией для использования здесь. Вот что я пробовал:

reshape(df, idvar='blocksequenceid', timevar = 'description', direction = 'wide')
reshape(df, idvar='blocksequenceid', v.names = 'description', direction = 'wide')

Я уверен, что это так просто, но я что-то упускаю.

1 Ответ

0 голосов
/ 27 апреля 2018

Вот воспроизводимые данные.

t <- 'blocksequenceid description
M049-S215-S085 ECDTM-49
M049-S215-S085 ICD-215 
M049-S215-S085 ICD-85'

df <- read.table(text = t, header = T)

Вот возможное решение.

library(tidyverse)
df %>% 
  rename(description1 = description) %>%
  mutate(description = row_number()) %>%
  spread(description, description1, sep = "")

#   blocksequenceid description1 description2 description3
# 1  M049-S215-S085     ECDTM-49      ICD-215       ICD-85

Редактировать для измененных данных

t <- 'blocksequenceid description
M049-S215-S085 ECDTM-49
M049-S215-S085 ICD-215 
M049-S215-S085 ICD-85
M049-S213-S044 ECDTM-49
M049-S213-S044 ICD-213
M049-S213-S044 ICD-44'

df <- read.table(text = t, header = T)

В обновленных данных вы должны сначала выполнить group_by(blocksequenceid).

library(tidyverse)
df %>% 
  rename(description1 = description) %>%
  group_by(blocksequenceid) %>%
  mutate(description = row_number()) %>%
  spread(description, description1, sep = "")

# # A tibble: 2 x 4
# # Groups:   blocksequenceid [2]
#   blocksequenceid description1 description2 description3
#   <chr>           <chr>        <chr>        <chr>       
# 1 M049-S213-S044  ECDTM-49     ICD-213      ICD-44      
# 2 M049-S215-S085  ECDTM-49     ICD-215      ICD-85
...