Добавить столбец на фрейм данных

Функция eval выполняет заданный ему код php. Поскольку ваш код ничего не возвращает, он дает null. Вам нужно вернуть массив и сохранить его в переменной, например

$arr = eval("return array('foo'=>'bar');");
0
задан Ronak Shah 17 January 2019 в 12:14
поделиться

3 ответа

Весьма похоже на подход Керри Джексона, но с использованием ifelse в базе R. Я также с самого начала преобразовал ваш x$HospitalNumber из фактора в персонаж, предполагая, что это именно то, что вам действительно нужно:

x[2] <- as.character( x[ , 2 ] )
x$CRN <- ifelse( grepl( "^\\d{9}[[:alpha:]]$", x$HospitalNumber) , x$HospitalNumber, "" )
x$TIT <- ifelse( x$CRN != "", "", x$HospitalNumber )
[ 115] дает вам

> x
   LocationCode HospitalNumber   DisciplineName        CRN        TIT
1          ESC3     701190923R ESC Biochemistry 701190923R           
2       RIECAA6     2905451068  RIE Haematology            2905451068
3        SJHMAU     700547389X SJH Biochemistry 700547389X           
4        RIE104     AN11295201 RIE Biochemistry            AN11295201
5         SJH11     1204541612 SJH Biochemistry            1204541612
6         SJHAE      104010665 WGH Biochemistry             104010665
7        RIEAE1     800565884R ESC Biochemistry 800565884R           
8         WGH54     620063158W WGH Biochemistry 620063158W           
9        RIE205     600029720K SJH Biochemistry 600029720K           
10       GSBROB     1112391223  RIE Haematology            1112391223
0
ответ дан vaettchen 17 January 2019 в 12:14
поделиться

Вы можете сделать это в базе, используя код

# Identify cases which match 9 digits then one letter
CRMMatch <- grepl("^\\d{9}[[:alpha:]]$", as.character(x$HospitalNumber))
#Create columns from Hospital number among the matches or those that do not match
x$CRN[CRMMatch] <- as.character(x$HospitalNumber)[CRMMatch]
x$TIT[!CRMMatch] <- as.character(x$HospitalNumber)[!CRMMatch]
# clean up by removing the variable created of matches
rm(CRMMatch)

A dplyr версия может быть

library(dplyr)
x <-
  x %>% 
  mutate(CRN = if_else(grepl("^\\d{9}[[:alpha:]]$", as.character(HospitalNumber)),as.character(HospitalNumber), NA_character_),
         TIT = if_else(!grepl("^\\d{9}[[:alpha:]]$", as.character(HospitalNumber)),as.character(HospitalNumber), NA_character_))
0
ответ дан Kerry Jackson 17 January 2019 в 12:14
поделиться

Вы можете определить, что вам нужно, с помощью инструкции

library(stringr)
str_which(x$HospitalNumber,"[:digit:][:alpha:]")

, и вы получите:

> str_which(x$HospitalNumber,"[:digit:][:alpha:]")
[1] 1 3 7 8 9

Тогда вы будете знать, какие позиции вам нужны, а какие нет

0
ответ дан Marco De Virgilis 17 January 2019 в 12:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: