R 从现有行和列中的值创建新变量
我想创建一个名为change\u index的新变量。此变量是时间3的结果1-时间1的结果1/时间1的结果1 我该怎么做呢?我试着做了以下几件事R 从现有行和列中的值创建新变量,r,dplyr,mutate,R,Dplyr,Mutate,我想创建一个名为change\u index的新变量。此变量是时间3的结果1-时间1的结果1/时间1的结果1 我该怎么做呢?我试着做了以下几件事 outcome1t0 <- data %>% filter(time == "1") %>% select(outcome1) outcome1t12 <- data %>% filter(time == "3") %>% select(outcome1) data$newvariable <- (outc
outcome1t0 <- data %>%
filter(time == "1") %>%
select(outcome1)
outcome1t12 <- data %>%
filter(time == "3") %>%
select(outcome1)
data$newvariable <- (outcome1t0 - outcome1t12) / outcome1t0
编辑1
按照下面的建议尝试了以下操作,我根据自己的数据更改了名称
ancestral1 %>%
group_by(subject) %>%
mutate(bicep0 = bicep[time == 0],
bicep12 = bicep[time == 12],
bicepind = (bicep12 - bicep0) / bicep12)
我得到以下错误
Error in `$<-.data.frame`(`*tmp*`, bicind, value = list(bicep = c(13.3591525423729, :
replacement has 20 rows, data has 60
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
我们不做过滤,而是创建新的变量
data %>%
group_by(subject) %>%
mutate(outcome1t0 = outcome1[time == 1],
outcome1t2 = outcome1[time == 3],
newvariable = (outcome1t0 - outcome1t2) / outcome1t0) %>%
select(-outcome1t0, -outcome1t2)
# A tibble: 6 x 6
# Groups: subject [2]
# subject treatment time outcome1 outcome2 newvariable
# <int> <chr> <int> <int> <int> <dbl>
#1 1 a 1 80 15 0.075
#2 1 a 2 75 14 0.075
#3 1 a 3 74 12 0.075
#4 2 b 1 90 16 0.156
#5 2 b 2 81 15 0.156
#6 2 b 3 76 15 0.156
出现错误的原因是,当您进行筛选时,两个对象的行数不同。在您显示的示例中,两个“主题”都有1和3。如果不是这样,就会导致错误。您可能需要更改示例,并在这种情况下显示预期输出。谢谢,在我的数据集中,所有受试者仅在0、6、12周时有结果。大约有40个科目。我不确定出了什么问题。请检查代码数据%>%groupbysubject%>%mutateoutcome1t0=ifanytime==5 outcome1[time==5]否则NA,outcome1t2=outcome1[time==3],newvariable=outcome1t0-outcome1t2/outcome1t0hanks,我尝试过,相同的错误。我已经更新了主帖子。谢谢@akrun。我尝试过这样做,但出现了一个错误。我已经更新了我的主要帖子以显示错误。@DiscoR如果每个“主题”只有唯一的时间值,它应该work@DiscoR创建一个if/else条件,例如没有时间5。如果我使用数据%>%groupbysubject%>%mutateoutcome1t0=ifanytime==5 outcome1[time==5],否则NA,outcome1t2=outcome1[time==3],newvariable=outcome1t0-outcome1t2/outcome1t0好的,非常感谢。我认为它奏效了。不过,在我从环境中提取的数据框架中,我没有看到新的变量。如何创建此新列并将其保存到环境中的数据帧?@DiscoR您可能应该使用first/last而不是硬编码时间,例如DT%>%group\u bysubject%>%SummarseChange=if n==1 NA\u real\u else LastOutcome 1-FirstOutcome 1/FirstOutcome我想如果你试图以这种方式处理多个结果,可能会有一些总结或变异
data %>%
group_by(subject) %>%
mutate(outcome1t0 = outcome1[time == 1],
outcome1t2 = outcome1[time == 3],
newvariable = (outcome1t0 - outcome1t2) / outcome1t0) %>%
select(-outcome1t0, -outcome1t2)
# A tibble: 6 x 6
# Groups: subject [2]
# subject treatment time outcome1 outcome2 newvariable
# <int> <chr> <int> <int> <int> <dbl>
#1 1 a 1 80 15 0.075
#2 1 a 2 75 14 0.075
#3 1 a 3 74 12 0.075
#4 2 b 1 90 16 0.156
#5 2 b 2 81 15 0.156
#6 2 b 3 76 15 0.156