在R中将1列拆分为1到3列
我一直在为一个个人项目努力编写代码,遇到了一些障碍 我有一些餐厅数据,表格中有一列,信息以/分隔 例如: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列,按表格或多哥、拆分和营业额来组织。像这样:在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
> 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)