基于列插入行的R代码';s值并将其递增1

基于列插入行的R代码';s值并将其递增1,r,R,我的数据中有两列,如下所示。我想根据Total列中的值插入行。对于记录1,总值为9。因此,代码XS1.1应该有9条记录,总数从1开始到9。为了更清晰,请查看以下预期输出。我正在学习R的基础知识。你能帮我学一下代码吗 Code Total XS1.1 9 W1.23 3 Kj1.9 2 预期输出: Code Total XS1.1 1 XS1.1 2 XS1.1 3 XS1.1 4 XS1.1 5 XS1.1

我的数据中有两列,如下所示。我想根据Total列中的值插入行。对于记录1,总值为9。因此,代码XS1.1应该有9条记录,总数从1开始到9。为了更清晰,请查看以下预期输出。我正在学习R的基础知识。你能帮我学一下代码吗

Code        Total
XS1.1       9
W1.23       3
Kj1.9       2
预期输出:

Code     Total
XS1.1    1
XS1.1    2
XS1.1    3
XS1.1    4
XS1.1    5
XS1.1    6
XS1.1    7
XS1.1    8
XS1.1    9
W1.23    1
W1.23    2
W1.23    3
Kj1.9    1
Kj1.9    2
或基本
R

with(df, data.frame(code=rep(code, Total), Total=sequence(Total)))
或基本
R

with(df, data.frame(code=rep(code, Total), Total=sequence(Total)))

首先制作您预期的数据帧,然后制作您想要的数据帧:

dat <- data.frame("Code"=c("XS1.1","W1.23","Kj1.9"),"Total"=c(9,3,2))
dat2 <- data.frame("Code"=rep(dat[,1],dat[,2]),"Total"=c(seq(1:dat[1,2]),seq(1:dat[2,2]),seq(1:dat[3,2])))

dat首先制作您预期的数据帧,然后制作您想要的数据帧:

dat <- data.frame("Code"=c("XS1.1","W1.23","Kj1.9"),"Total"=c(9,3,2))
dat2 <- data.frame("Code"=rep(dat[,1],dat[,2]),"Total"=c(seq(1:dat[1,2]),seq(1:dat[2,2]),seq(1:dat[3,2])))
dat另一个想法:

library(tidyr)
library(dplyr)

df %>% 
  group_by(Code) %>%
  complete(Total = full_seq(1:Total, 1))
其中:

#Source: local data frame [14 x 2]
#Groups: Code [3]
# 
#     Code Total
#   <fctr> <dbl>
#1   Kj1.9     1
#2   Kj1.9     2
#3   W1.23     1
#4   W1.23     2
#5   W1.23     3
#6   XS1.1     1
#7   XS1.1     2
#8   XS1.1     3
#9   XS1.1     4
#10  XS1.1     5
#11  XS1.1     6
#12  XS1.1     7
#13  XS1.1     8
#14  XS1.1     9 
#来源:本地数据帧[14 x 2]
#分组:代码[3]
# 
#代码总数
#    
#1 Kj1.9 1
#2 Kj1.9 2
#3 W1.23 1
#4 W1.23 2
#5 W1.23 3
#6xs1.1
#7 XS1.1 2
#8xs1.13
#9 XS1.1 4
#10 XS1.1 5
#11 XS1.1 6
#12 XS1.1 7
#13 XS1.1 8
#14 XS1.19
另一个想法:

library(tidyr)
library(dplyr)

df %>% 
  group_by(Code) %>%
  complete(Total = full_seq(1:Total, 1))
其中:

#Source: local data frame [14 x 2]
#Groups: Code [3]
# 
#     Code Total
#   <fctr> <dbl>
#1   Kj1.9     1
#2   Kj1.9     2
#3   W1.23     1
#4   W1.23     2
#5   W1.23     3
#6   XS1.1     1
#7   XS1.1     2
#8   XS1.1     3
#9   XS1.1     4
#10  XS1.1     5
#11  XS1.1     6
#12  XS1.1     7
#13  XS1.1     8
#14  XS1.1     9 
#来源:本地数据帧[14 x 2]
#分组:代码[3]
# 
#代码总数
#    
#1 Kj1.9 1
#2 Kj1.9 2
#3 W1.23 1
#4 W1.23 2
#5 W1.23 3
#6xs1.1
#7 XS1.1 2
#8xs1.13
#9 XS1.1 4
#10 XS1.1 5
#11 XS1.1 6
#12 XS1.1 7
#13 XS1.1 8
#14 XS1.19


谢谢您的回答。我正在一个接一个地尝试你所有的解决方案@史蒂文,我正试图使用你的代码,但我有一个错误。eval(replacement(expr)、envir、enclose)中出错:分组依据的未知变量:Code。。你能帮我纠正这个错误吗?如果我做了傻事,我很抱歉。这是我的密码。library(tidyr)library(dplyr)library(mi)df.WPnRawQuarter%%>%group_by(Code)%%>%Complete(Total=full_seq(1:Total,1))对于您提供的示例来说效果很好。可能会发布一个
dput(head(df.WPnRawQuarter))
?另外,您似乎使用了
Complete
而不是
Complete
?是的,我已将Complete替换为Complete。它现在给了我这个错误。(函数(类、fdef、mtable)中出错:找不到签名“grouped_df”、“missing”的函数“complete”的继承方法。以下是您要求的..结构(列表(代码=c(“C01”、“M.1”、“R”、“N”、“R2”、“C1”)、总计=c(1、9、9、9、10、9))。名称=c(“代码”、“总计”)、行名称=c(NA、6L)、类=“数据帧”)。使用您的
dput
,它在我这方面工作正常。可能重新启动
R
并重新加载软件包。另外,请确保您拥有最新版本的软件包。当然。谢谢。我会这样做。我想tidyr具有完整的功能。我已经安装了它。让我重新启动,看看会发生什么。谢谢您的所有回答。我正在尝试一个接一个地修改你的解决方案。@Steven,我试图使用你的代码,但我遇到了一个错误。eval(replacement(expr)、envir、enclose)中的错误:分组依据的未知变量:code..你能帮我修复错误吗?如果我做了一些愚蠢的事情,我很抱歉。这是我的代码。库(tidyr)库(dplyr)库(mi)df.WPnRawQuarter%%>%group_by(Code)%%>%Complete(Total=full_seq(1:Total,1))对于您提供的示例,它工作得很好。可能会发布一个dput(head(df.WPnRawQuarter))?另外,似乎您使用了Complete而不是Complete?是的,我已将Complete替换为Complete。它现在给我这个错误。错误在(函数(类、fdef、mtable):无法为签名“grouped_df”、“missing”找到函数“complete”的继承方法。以下是您要求的..结构(列表(代码=c(“C01”、“M.1”、“R”、“N”、“R2”、“C1”)、总计=c(1,9,9,9,10,9))、名称=c(“代码”、“总计”)、行名称=c(NA,6L)、类=“数据框架”)。使用您的
dput
,它在我这方面工作正常。可能重新启动
R
并重新加载软件包。另外,请确保您拥有最新版本的软件包。当然。谢谢。我会这样做。我想tidyr具有完整的功能。我已经安装了它。让我重新启动,看看会发生什么。没有看到您发布了类似的版本base R中的sion。不用担心,还有…我想我提醒了你以前的一篇帖子中的序列;)谢谢上校。我尝试了代码库(data.table)setDT(df.WRawQuart)[,(Total=1:Total),code]。但是它抛出了这个错误。eval中的错误(expr,envir,enclose):找不到对象“code”你能帮忙吗?我还尝试了你的其他建议。有(df.WRawQuart,data.frame(code=rep(code,Total),Total=sequence(Total)))它在data.frame(code=rep(code,Total),Total=sequence(Total))中给出了这个错误:找不到对象“code”你能帮忙吗?用大写字母编码抱歉,它应该与你列的名称相对应。没有看到你在base R中发布了类似的版本。不用担心,而且…我想我提醒了你以前发布的一篇文章的顺序;)谢谢上校。我尝试了代码库(data.table)setDT(df.WRawQuart)[,],。(Total=1:Total,code.)。但是它抛出了这个错误。eval(expr,envir,enclose)中的错误:找不到对象“code”:你能帮忙吗?我也尝试了你的其他建议。使用(df.WRawQuart,data.frame(code=rep(code,Total),Total=sequence(Total)),它在data.frame(code=rep(code,Total),Total=sequence(Total))中给了我这个错误:找不到对象“code”是否可以提供帮助?请使用大写字母进行编码对不起,它应该与列的名称相对应。