将数字分为不同的列并在R中重命名它们

问题描述

我有一个名为KID的数据集,其中的STRATA列具有4位数字(nnnn)。每个数字代表医院的不同特征(地理,大小,类型等),具体取决于号码的位置及其值。例如:

KID $ STRATA

第一位数=地理位置:东北(1),中西部(2),南(3),西(4)

第二位数字=控制权:政府(1),私人,非营利组织(2),私人,投资者所有(3),私人(非盈利或投资者所有)(4)>

第三位=位置/教学:农村(1),城市非教学(2),城市教学(3)

第四位=床型:小(1),中(2),大(3)

是否有一种方法可以将每个数字(第一个数字分成一个新的列,第二个数字分成一个不同的列,对于第三和第四个类似)分成不同的列并根据其特征重命名?

解决方法

使用strsplit,您可以在每个字符上分割字符串并创建新列。

cols <- c('geography','Control','Location','Bedsize')
KID[cols] <- do.call(rbind,strsplit(as.character(KID$STRATA),'')) 
KID

#  STRATA geography Control Location Bedsize
#1   4231         4       2        3       1
#2   2321         2       3        2       1
#3   3133         3       1        3       3
#4   2112         2       1        1       2
#5   3212         3       2        1       2

或使用splitstackshape

splitstackshape::cSplit(KID,'STRATA','',stripWhite = FALSE,drop = FALSE)

数据

KID <- data.frame(STRATA = c(4231,2321,3133,2112,3212))
,

您不需要正则表达式。使用“ tidyr”和“ dplyr”。可以为“ tidyr”中的“ separate()”函数提供一个字符位置的向量以进行分割。

library(dplyr)
library(tidyr)

KID %>% separate(col = STRATA,sep = 1:4,into = c("Region","Control","Location_Teaching","Bedsize"))
  Region Control Location_Teaching Bedsize
1      4       2                 3       1
2      2       3                 2       1
3      3       1                 3       3
4      2       1                 1       2
5      3       2                 1       2
,

data.table解决方案

library( data.table )
KID <- data.table( STRATA = c(4231,3212) )
cols = c("Geographic_location","Bedsize" )
KID[,(cols) := tstrsplit( STRATA,"" ) ]


#    STRATA Geographic_location Control Location_Teaching Bedsize
# 1:   4231                   4       2                 3       1
# 2:   2321                   2       3                 2       1
# 3:   3133                   3       1                 3       3
# 4:   2112                   2       1                 1       2
# 5:   3212                   3       2                 1       2

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...