R 基于列中的值的透视数据集长度

R 基于列中的值的透视数据集长度,r,pivot,tidyverse,R,Pivot,Tidyverse,我想知道是否有任何tidyverse函数可以通过在一列中应用值来延长数据集的长度。如果我提供一个例子,就更容易解释了。实际上,我想用它将个人生存数据集转换为个人周期,但现在我只想知道这个简单的事情 这是数据。我们有一个id变量(id),一个时不变预测因子(sex),还有一个变量,告诉我们有问题的参与者被观察了多少个观察点 df <- data.frame(id = 1:3, sex = factor(c("m", "f&qu

我想知道是否有任何tidyverse函数可以通过在一列中应用值来延长数据集的长度。如果我提供一个例子,就更容易解释了。实际上,我想用它将个人生存数据集转换为个人周期,但现在我只想知道这个简单的事情

这是数据。我们有一个id变量(
id
),一个时不变预测因子(
sex
),还有一个变量,告诉我们有问题的参与者被观察了多少个观察点

df <- data.frame(id = 1:3, 
                 sex = factor(c("m", "f", "f")),
                 years = c(4,5,3))
df

#   id sex years
# 1  1   m     4
# 2  2   f     5
# 3  3   f     3

df而不是
pivot\u longer
,我们可以通过
uncount

library(tidyr)
library(dplyr)
df %>% 
   uncount(years)
-输出

#    id sex
#1   1   m
#2   1   m
#3   1   m
#4   1   m
#5   2   f
#6   2   f
#7   2   f
#8   2   f
#9   2   f
#10  3   f
#11  3   f
#12  3   f
#    id sex
#1   1   m
#2   1   m
#3   1   m
#4   1   m
#5   2   f
#6   2   f
#7   2   f
#8   2   f
#9   2   f
#10  3   f
#11  3   f
#12  3   f

或者使用
baser
r4.1.0


天哪,格雷西丝@akrun我一点也不懂基本的R代码。例如,
|>
做什么?来到这个网站是非常谦卑的,这是一个很好的方式。@llewmills它类似于
tidyverse
中的
%>%
操作符,只是我们不能使用
作为链式操作符之前的数据。在这里,我们可以使用lambda函数(
function(x)x..
,或者在新版本中,它可以是
\(x)x
。基本上,它是提取“years”列,然后按顺序复制它,使用
[
。按行/列索引/名称将df的行子集,并将行名称设置为NULL@llewmills我们可以把它简化为
df[rep(seq_len(nrow(df)),df$years,c('id','sex')]
,但我想把它作为新的东西添加进来
df$years |>
     {\(x) rep(seq_along(x), x)}() |> 
     {\(i) `[`(df, i, c('id', 'sex'))}() |>
     `row.names<-`(NULL)
#    id sex
#1   1   m
#2   1   m
#3   1   m
#4   1   m
#5   2   f
#6   2   f
#7   2   f
#8   2   f
#9   2   f
#10  3   f
#11  3   f
#12  3   f