Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中将1列拆分为1到3列_R_Rstudio - Fatal编程技术网

在R中将1列拆分为1到3列

在R中将1列拆分为1到3列,r,rstudio,R,Rstudio,我一直在为一个个人项目努力编写代码,遇到了一些障碍 我有一些餐厅数据,表格中有一列,信息以/分隔 例如:4/1表示表4,首先检查当天的表。10/A/2表示表10,支票分为2张或多张支票A、B、C等,这是支票10/A和营业额2 支票也可以是多哥订单,可以用订单名称表示 例如,以下是一些可能的订单: 1/1 1/2 10/A/3 10/B/3 多哥 鲍勃·多哥 我想把它们分成1到3列,按表格或多哥、拆分和营业额来组织。像这样: > check <- c("1/1", "1/2", "10

我一直在为一个个人项目努力编写代码,遇到了一些障碍

我有一些餐厅数据,表格中有一列,信息以/分隔

例如:4/1表示表4,首先检查当天的表。10/A/2表示表10,支票分为2张或多张支票A、B、C等,这是支票10/A和营业额2

支票也可以是多哥订单,可以用订单名称表示

例如,以下是一些可能的订单:

1/1 1/2 10/A/3 10/B/3 多哥 鲍勃·多哥

我想把它们分成1到3列,按表格或多哥、拆分和营业额来组织。像这样:

> check <- c("1/1", "1/2", "10/A/3", "10/B/3", "Togo", "Bob Togo")
> checknum <- seq(1:6)
> dat <- cbind(checknum,check)
> dat
     checknum check     
[1,] "1"      "1/1"     
[2,] "2"      "1/2"     
[3,] "3"      "10/A/3"  
[4,] "4"      "10/B/3"  
[5,] "5"      "Togo"    
[6,] "6"      "Bob Togo"
理想情况下,我希望它们看起来像这样:

> Table <- c(1,1,10,10,"Togo","Bob Togo")
> Split <- c(NA,NA,"A","B",NA,NA)
> Turn <- c(1,2,3,3,NA,NA)
> Ideal <- cbind(checknum,Table,Split,Turn)
> Ideal
     checknum Table      Split Turn
[1,] "1"      "1"        NA    "1" 
[2,] "2"      "1"        NA    "2" 
[3,] "3"      "10"       "A"   "3" 
[4,] "4"      "10"       "B"   "3" 
[5,] "5"      "Togo"     NA    NA  
[6,] "6"      "Bob Togo" NA    NA 
其中,所有列都是针对NAs的特定方面检查缺少的值

数值可以保留为因子,因为每一个数值都是一个因子而不是一个整数。理想情况下,Bob Togo也将更名为Togo,以便所有Togo订单共享相同的因子

我知道这有点突然,但我已经遇到了两个多星期的障碍,我觉得我错过了一些简单的东西

我对R比较陌生,因此非常感谢您对我的答案所作的任何补充解释

我们可以通过使用str_replace对“check”列进行变异,然后将“check”分为三列来实现这一点

library(tidyverse)
dat %>%
   mutate(check = str_replace(check, "^(\\d+)/(\\d+)$", "\\1/NA/\\2"))  %>%
   separate( check, into = c("Table", "Split", "Turn"), sep="/", convert = TRUE)
#   checknum    Table Split Turn
#1        1        1    NA    1
#2        2        1    NA    2
#3        3       10     A    3
#4        4       10     B    3
#5        5     Togo  <NA> <NA>
#6        6 Bob Togo  <NA> <NA>

我会尝试使用逻辑进行拆分。如果没有,请将其分配给表。如果有一个/和字符,则将第一个字符指定给表,第二个字符指定给拆分。如果是数字,则将第一个指定给表格,第二个指定给旋转。如果有三个,我仍然会指定character/num逻辑来验证它们是否进入正确的列。好像只有一个,它总是放在桌子上。您应该能够使用if、ifelse和else使用循环遍历该列。发言。投票表决。此外,我认为应该注意stru_replace的来源。谢谢你,Akrun!我刚刚开始用我的完整数据集进行测试,经过几次调整后工作得非常出色。干杯
dat <- data.frame(checknum,check, stringsAsFactors=FALSE)