【发布时间】:2018-09-21 15:29:39
【问题描述】:
我想创建一个名为 change_index 的新变量。这个变量是时间 3 的结果 1 - 时间 1 的结果 1 / 时间 1 的结果 1。
我该怎么做呢?我尝试执行以下操作
outcome1t0 <- data %>%
filter(time == "1") %>%
select(outcome1)
outcome1t12 <- data %>%
filter(time == "3") %>%
select(outcome1)
data$newvariable <- (outcome1t0 - outcome1t12) / outcome1t0
但我收到以下错误
Error in `$<-.data.frame`(`*tmp*`, bicind, value = list(bicep = c(13.3591525423729, :
replacement has 20 rows, data has 60
我意识到这是因为新数据框更小,因为它包含更少的行。我应该只创建一个带有更改索引的新数据框吗?我该怎么做?
我必须为列中的许多变量(许多结果)计算这个变化指数。有没有办法自动化这个过程?
感谢阅读。
subject treatment time outcome1 outcome2
1 1 a 1 80 15
2 1 a 2 75 14
3 1 a 3 74 12
4 2 b 1 90 16
5 2 b 2 81 15
6 2 b 3 76 15
编辑 1
尝试按照以下建议进行以下操作,我根据我的数据更改了名称
ancestral1 %>%
group_by(subject) %>%
mutate(bicep0 = bicep[time == 0],
bicep12 = bicep[time == 12],
bicepind = (bicep12 - bicep0) / bicep12)
我收到以下错误
Error in mutate_impl(.data, dots) :
Column `bicep0` must be length 1 (the group size), not 0
编辑 2
尝试了新的建议,仍然是同样的错误
ancestral1 %>%
group_by(subject) %>%
mutate(bicep0 = if(any(time == 5)) bicep[time == 5] else NA,
bicep12 = bicep[time == 3],
bicepind = (bicep0 - bicep12) / bicep0)
Error in mutate_impl(.data, dots) :
Column `bicep12` must be length 1 (the group size), not 0
【问题讨论】:
-
错误原因是你
filter时,两个对象的行数不同 -
在您展示的示例中,'subject'都有1和3。如果不是这样,则会导致错误。在这种情况下,您可能必须更改示例并显示预期的输出
-
谢谢,在我的数据集中,所有受试者仅在 0、6、12 周时有结果。大约有40个科目。我不确定出了什么问题。
-
请查看代码
data %>% group_by(subject) %>% mutate(outcome1t0 = if(any(time == 5)) outcome1[time == 5] else NA, outcome1t2 = outcome1[time == 3], newvariable = (outcome1t0 - outcome1t2) / outcome1t0) -
谢谢,我试过了,同样的错误。我已经更新了主帖。