R代码按顺序生成数字并插入行
我有一个包含两列的数据集。第一列是ID,第二列是季度总数。如果列B(四分之一)的值为8,则应从1到8开始创建8行。列A中的ID对于所有行都应相同。下面显示的数据集就是一个示例R代码按顺序生成数字并插入行,r,R,我有一个包含两列的数据集。第一列是ID,第二列是季度总数。如果列B(四分之一)的值为8,则应从1到8开始创建8行。列A中的ID对于所有行都应相同。下面显示的数据集就是一个示例 ID Quarters A 5 B 2 C 1 预期产量 ID Quarters A 1 A 2 A 3 A 4 A 5 B 1 B 2
ID Quarters
A 5
B 2
C 1
预期产量
ID Quarters
A 1
A 2
A 3
A 4
A 5
B 1
B 2
C 1
这是我试过的
library(data.table)
setDT(df.WQuarter)[, (Quarters=1:Quarters), ID]
我得到这个错误。你能帮忙吗。我真的被这件事困扰了一整天。我只是在学习R的基本知识。我们可以使用
基本R
通过'Quarter'复制'ID',并通过获取该列的序列创建'Quarter'
with(df1, data.frame(ID= rep(ID, Quarters), Quarters = sequence(Quarters)))
# ID Quarters
#1 A 1
#2 A 2
#3 A 3
#4 A 4
#5 A 5
#6 B 1
#7 B 2
#8 C 1
如果我们使用的是data.table
,请将'data.frame'转换为'data.table'(setDT(df1)
),按'ID'分组,获取'Quarters'的序列
,或者只获取seq(Quarters)
正如@Pierrelaffortune在帖子中评论的那样,如果我们有NA值,那么我们需要删除它
setDT(df1)[, .(Quarters = seq_len(Quarters[!is.na(Quarters)])), by = ID]
或者使用dplyr/tidyr
library(dplyr)
library(tidyr)
df1 %>%
group_by(ID) %>%
mutate(Quarters = list(seq(Quarters))) %>%
ungroup() %>%
unnest(Quarters)
如果OP的“四分之一”列不是数字,则应在继续之前将其转换为“数字”
df1$Quarters <- as.numeric(as.character(df1$Quarters))
谢谢Akrun…我试过你建议的基本R代码。我得到这个错误。rep(ID,Quarters)中出错:无效的'times'参数对于第二个选项,我收到此错误。FUN(X[[i]],…)中的错误:参数必须强制为非负整数。您能提供帮助吗?@user2341632请检查str(yourdata)
,我想您有一个非数字的“TotalQuarters”列。我用数据更新了帖子。这是我的数据结构。类“data.table”和“data.frame”:86 obs。共2个变量:$ID:chr“C.1”“M.1”“R.0”“N.3…”总季度数:19 9 9 10 9 13 1 2…-attr(*,“.internal.selfref”)=阅读了昨天的问题后,他们的问题是NA值。这就是他们的解决方案不起作用的原因。可能添加df1[,(Quarters=sequence(na.omit(Quarters))),by=ID]
发布的代码为什么又问同样的问题?关于链接副本,您有三个答案。问题在于NA
值<代码>df1[,(四分之一=序列(na.省略(四分之一)),by=ID]
df1$Quarters <- as.numeric(as.character(df1$Quarters))
df1 <- structure(list(ID = c("A", "B", "C"), Quarters = c(5L, 2L, 1L
)), .Names = c("ID", "Quarters"), class = "data.frame", row.names = c(NA,
-3L))