首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数据框上添加列

在数据框上添加列
EN

Stack Overflow用户
提问于 2019-01-17 20:00:52
回答 3查看 50关注 0票数 0

如果你能帮我的话我有个R问题。

代码语言:javascript
运行
复制
x <- data.frame("LocationCode" = c("ESC3","RIECAA6","SJHMAU","RIE104","SJH11","SJHAE","RIEAE1","WGH54","RIE205","GSBROB"), "HospitalNumber" = c("701190923R","2905451068","700547389X","AN11295201","1204541612","104010665","800565884R","620063158W","600029720K","1112391223"),"DisciplineName" = c("ESC Biochemistry", "RIE Haematology","SJH Biochemistry","RIE Biochemistry","SJH Biochemistry","WGH Biochemistry","ESC Biochemistry","WGH Biochemistry","SJH Biochemistry","RIE Haematology"))

从上面的数据框中,我确实希望添加一个新列(CRN),它由所有"HospitalNumber“行组成,末尾有9个数字和1个字母(例如701190923R),用不符合第一个标准的其余行创建另一个列(TIT

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-17 20:31:33

您可以在base中使用以下代码完成此操作

代码语言:javascript
运行
复制
# 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)

dplyr版本可以是

代码语言:javascript
运行
复制
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_))
票数 1
EN

Stack Overflow用户

发布于 2019-01-17 20:16:09

您可以使用以下指令检测您需要的内容

代码语言:javascript
运行
复制
library(stringr)
str_which(x$HospitalNumber,"[:digit:][:alpha:]")

然后你会得到:

代码语言:javascript
运行
复制
> str_which(x$HospitalNumber,"[:digit:][:alpha:]")
[1] 1 3 7 8 9

然后你就知道你需要什么职位,不需要什么职位

票数 0
EN

Stack Overflow用户

发布于 2019-01-17 21:00:16

与Kerry Jackson的方法非常相似,但在base R中使用ifelse。我还从一开始就将x$HospitalNumber从因子转换为字符,假设这是您真正想要的:

代码语言:javascript
运行
复制
x[2] <- as.character( x[ , 2 ] )
x$CRN <- ifelse( grepl( "^\\d{9}[[:alpha:]]$", x$HospitalNumber) , x$HospitalNumber, "" )
x$TIT <- ifelse( x$CRN != "", "", x$HospitalNumber )

为您提供

代码语言:javascript
运行
复制
> 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54235494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档