2016-05-19 2 views
2

У меня есть следующие данные:R tidyr :: распространять дубликата ошибки

ID  AGE SEX RACE COUNTRY VISITNUM VSDTC VSTESTCD VSORRES 
32320058 58 M WHITE UKRAINE 2 2016-04-28  DIABP   74 
32320058 58 M WHITE UKRAINE 1 2016-04-21  HEIGHT  183 
32320058 58 M WHITE UKRAINE 1 2016-04-21  SYSBP   116 
32320058 58 M WHITE UKRAINE 2 2016-04-28  SYSBP   116 
32320058 58 M WHITE UKRAINE 1 2016-04-21  WEIGHT  109 
22080090 75 M WHITE MEXICO 1 2016-05-17  DIABP   81 
22080090 75 M WHITE MEXICO 1 2016-05-17  HEIGHT  176 
22080090 75 M WHITE MEXICO 1 2016-05-17  SYSBP   151 

Я хотел бы, чтобы изменить данные, используя tidyr :: распространение, чтобы получить следующий вывод:

ID AGE SEX RACE COUNTRY VISITNUM VSDTC DIABP SYSBP WEIGHT HEIGHT 
32320058 58 M WHITE UKRAINE 2 2016-04-28 74 116 NA NA 
32320058 58 M WHITE UKRAINE 1 2016-04-21 NA 116 109 183 
22080090 75 M WHITE MEXICO 1 2016-05-17 81 151 NA 176 

Я получаю повторяющиеся ошибки, хотя у меня нет дубликатов в моих данных!

df1=spread(df,VSTESTCD,VSORRES) 

Error: Duplicate identifiers for rows (36282, 36283), (59176, 59177), (59179, 59180)

+0

дают нам ваш 'dput' выход и ваш' spread' код – Ananta

+0

@ user9594 Можете ли вы поделиться фактические ошибки вы получаете и код, который вы запускаете для получения упомянутых ошибок? – Technophobe01

+0

Я обновил вопрос, чтобы включить команду и ошибку. TIA – user9594

ответ

0

Я предполагаю, что я понимаю ваш вопрос

# As many rows are identical, we should create a unique identifier column 

# Let's take iris dataset as an example 

# install caret package if you don't have it 

install.packages("caret") 

# require library 
library(tidyverse) 
library(caret) 

# check the dataset (iris) 
head(iris) 

# assume that I gather all columns in iris dataset, except Species variable 

# Create an unique identifier column and transform wide data to long data as follow 

iris_gather<- iris %>% dplyr::mutate(ID=row_number(Species)) %>% tidyr::gather(key=Type,value=my_value,1:4) 

# check first six rows 

head(iris_gather) 
# using *spread* to spread out the data 

iris_spread<- iris_gather %>% dplyr::group_by(ID) %>% tidyr::spread(key=Type,value=my_value) %>% dplyr::ungroup() %>% dplyr::select(-ID) 

# Check first six rows of iris_spread 

head(iris_spread) 
Смежные вопросы