基于 R 中时间点的长格式数据中的新变量
New variable in long format data based on timepoint in R
我似乎无法找到关于如何在长格式数据框中创建新的(例如)分组变量或基于 R 中某些行操作的 tibble 的答案
使用这个例子:
toosimpledataset_long <- read.table(header=TRUE, text='subject sex Timepoint measurement measurement2
1 M T01 7.9 1.9
1 M T02 12.3 NA
1 M T03 10.7 1.7
1 M T04 9.7 1.7
2 F T01 6.3 1.3
2 F T02 10.6 1.6
2 F T03 11.1 NA
2 F T04 12.5 1.7
3 F T01 5.5 NA
3 F T02 NA 1.1
3 F T03 13.8 1.8
3 F T04 15.7 1.7
4 M T01 10.5 1.5
4 M T02 13.4 1.4
4 M T03 12.4 1.4
4 M T04 11.3 1.9
')
我想创建
一个因子变量,它指示每个受试者在 T02 的值是否是例如<= 11 在 measurement 变量
和一个因子变量,它指示从 T01 到 T04 的变化百分比是否小于 50 %
能够使用这些因子变量作为分组变量,例如为了在 ggplot 中绘图,必须在每个主题的每一行中填写值(我认为)。
因此,正确的数据集应该是这样的:
subject sex Timepoint measurement measurement2 responder_crit responder_percentage
1 M T01 7.9 1.9 0 1
1 M T02 12.3 NA 0 1
1 M T03 10.7 1.7 0 1
1 M T04 9.7 1.7 0 1
2 F T01 6.3 1.3 1 0
2 F T02 10.6 1.6 1 0
2 F T03 11.1 NA 1 0
2 F T04 12.5 1.7 1 0
3 F T01 5.5 NA NA 0
3 F T02 NA 1.1 NA 0
3 F T03 13.8 1.8 NA 0
3 F T04 15.7 1.7 NA 0
4 M T01 10.5 1.5 0 1
4 M T02 13.4 1.4 0 1
4 M T03 12.4 1.4 0 1
4 M T04 11.3 1.9 0 1
不确定重塑是否是执行此类操作的标准方法。不幸的是,真实的数据集非常大而且非常混乱。重塑效果不佳。
您可以在 mutate
调用中针对某些时间点进行子集化:
toosimpledataset_long %>%
group_by(subject) %>%
mutate(
responder_crit = measurement[Timepoint == 'T02'] >= 11,
responder_percentage = (measurement[Timepoint == 'T04'] / measurement[Timepoint == 'T01']) < 1.5
)
我对 responder_crit
的看法不太一样,但我不明白你的示例中如何只得到一个 NA。
我似乎无法找到关于如何在长格式数据框中创建新的(例如)分组变量或基于 R 中某些行操作的 tibble 的答案
使用这个例子:
toosimpledataset_long <- read.table(header=TRUE, text='subject sex Timepoint measurement measurement2
1 M T01 7.9 1.9
1 M T02 12.3 NA
1 M T03 10.7 1.7
1 M T04 9.7 1.7
2 F T01 6.3 1.3
2 F T02 10.6 1.6
2 F T03 11.1 NA
2 F T04 12.5 1.7
3 F T01 5.5 NA
3 F T02 NA 1.1
3 F T03 13.8 1.8
3 F T04 15.7 1.7
4 M T01 10.5 1.5
4 M T02 13.4 1.4
4 M T03 12.4 1.4
4 M T04 11.3 1.9
')
我想创建
一个因子变量,它指示每个受试者在 T02 的值是否是例如<= 11 在 measurement 变量
和一个因子变量,它指示从 T01 到 T04 的变化百分比是否小于 50 %
能够使用这些因子变量作为分组变量,例如为了在 ggplot 中绘图,必须在每个主题的每一行中填写值(我认为)。
因此,正确的数据集应该是这样的:
subject sex Timepoint measurement measurement2 responder_crit responder_percentage
1 M T01 7.9 1.9 0 1
1 M T02 12.3 NA 0 1
1 M T03 10.7 1.7 0 1
1 M T04 9.7 1.7 0 1
2 F T01 6.3 1.3 1 0
2 F T02 10.6 1.6 1 0
2 F T03 11.1 NA 1 0
2 F T04 12.5 1.7 1 0
3 F T01 5.5 NA NA 0
3 F T02 NA 1.1 NA 0
3 F T03 13.8 1.8 NA 0
3 F T04 15.7 1.7 NA 0
4 M T01 10.5 1.5 0 1
4 M T02 13.4 1.4 0 1
4 M T03 12.4 1.4 0 1
4 M T04 11.3 1.9 0 1
不确定重塑是否是执行此类操作的标准方法。不幸的是,真实的数据集非常大而且非常混乱。重塑效果不佳。
您可以在 mutate
调用中针对某些时间点进行子集化:
toosimpledataset_long %>%
group_by(subject) %>%
mutate(
responder_crit = measurement[Timepoint == 'T02'] >= 11,
responder_percentage = (measurement[Timepoint == 'T04'] / measurement[Timepoint == 'T01']) < 1.5
)
我对 responder_crit
的看法不太一样,但我不明白你的示例中如何只得到一个 NA。