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