Сопоставить переменные различной длины с одним фреймом данных - PullRequest
0 голосов
/ 25 мая 2018

Предположим, мне нужны следующие данные

specialty <- c("Primary Care", "Internal Medicine Subspecialties" , 
 "Pediatric subspecialties","Surgical subspecialties", "Emergency 
  Medicine","All other specialties", "No Medical specialty")


 test <- c(23,43,67,77,54)

dfTEST <- data.frame(test)
dfTEST<- t(dfTEST)
colnames(dfTEST) <- c(1,2,4,5,7)

> dfTEST
      1  2  4  5  7
 test 23 43 67 77 54

Обратите внимание, что в моем dfTest есть 5 переменных, которые пропускают числа.Мне нужно создать фрейм данных, который сопоставляет эти числа colname (1,2,4,5,7) со специальностью.Специальность - это 7 строк, которые согласованы с именами dfTest.Значение dfTest 2 = "Подразделения внутренней медицины" и dfTest 4 = "Подгруппы хирургических операций и т. Д. Ниже приведен фрагмент того, чего я хочу достичь, но я озадачен тем, как это сделать. Мне нужно, чтобы он был гибким, поэтомучто независимо от того, какие числа в названиях столбцов, код все равно будет работать. Любые идеи? Спасибо !!

> dfTEST
          1                2           4  5  7
 test     23              43           67 77 54
added "primary care"   "internal" ... 

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Это должно решить вашу проблему.

library(dplyr)
specialty_lookup <- data.frame(specialty = c("Primary Care",
                         "Internal Medicine Subspecialties", 
                         "Pediatric subspecialties",
                         "Surgical subspecialties",
                         "Emergency Medicine",
                         "All other specialties",
                         "No Medical specialty"),
           test = 1:7, 
           stringsAsFactors = F)

data  <-  data.frame(code = c(23,43,67,77,54),
                  test = c(1,2,4,5,7))

data <- data %>% 
  left_join(specialty_lookup)

data_wide <- data %>% 
  select(-test) %>%
  t() %>% 
  data.frame()

colnames(data_wide) <- data$test
data_wide

Но вы должны спросить себя, действительно ли вы хотите, чтобы ваши данные имели такой формат.Судя по немногим, что я вижу в вашей проблеме, следующий формат будет более адекватным:

library(dplyr)
specialty_lookup <- data.frame(specialty = c("Primary Care",
                         "Internal Medicine Subspecialties", 
                         "Pediatric subspecialties",
                         "Surgical subspecialties",
                         "Emergency Medicine",
                         "All other specialties",
                         "No Medical specialty"),
           test = 1:7, stringsAsFactors = F)

data  <-  data.frame(code = c(23,43,67,77,54),
                  test = c(1,2,4,5,7))

data <- data %>% 
  left_join(specialty_lookup)

data
0 голосов
/ 25 мая 2018

Надеюсь, это поможет:

# get the indexes of correspondent specialties
ids <- as.integer(colnames(dfTEST))
dfTEST<- as.data.frame(t(dfTEST))
dfTEST$added <- specialty[ids]
dfTEST<- t(dfTEST)

Вывод:

> dfTEST
      1              2                                  4                        
test  "23"           "43"                               "67"                     
added "Primary Care" "Internal Medicine Subspecialties" "Surgical subspecialties"
      5                                     7                     
test  "77"                                  "54"                  
added "Emergency \n               Medicine" "No Medical specialty"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...