所以我有两个向量,剂量和性别。剂量是长度为 100 的数字的向量,性别是长度为"女性"和"男性"值的向量,长度也是 100。如果我定义什么是高剂量值(即高剂量为 40、50、60 等)并且我只想要女性患者,我将如何输出类似于以下示例输出的内容?
示例输出
[1] "女性高剂量患者 1 有剂量 63">
[1] "女性高剂量患者 2 有剂量 70">
[1] "女性高剂量患者 3 的剂量为 63.07">
[1] "女性高剂量患者 4 有剂量 58">
[1] "女性高剂量患者 5 的剂量为 75.25">
因此,首先让我为Gender
创建一些虚拟数据,并将Dose
作为向量:
Gender <- sample(c("Male", "Female"), 100, replace = TRUE)
Dose <- round(runif(100, min = 30, max = 70),2)
我们还将在此处定义high_dose
,可以是您喜欢的任何阈值:
high_dose <- 50
创建一个data.frame
:
df <- data.frame(Dose = Dose,
Gender = Gender)
使用dplyr
更轻松地操作数据:
# if you haven't already done so, you'll want to install.packages("dplyr")
library(dplyr)
df %>%
mutate(Level = ifelse(Dose >= high_dose, "High", "Low"),
Patient = row_number(),
Output = paste(Gender, Level, "Dose Patient", Patient, "has dose", Dose))
让我们分解一下。 首先,mutate
将 新列添加到我们的df
. 我们将从Level
开始,使用ifelse
语句来表示Dose
是否大于或等于我们定义high_dose
的任何值。
接下来,我任意分配Patient
作为行号。 如果患者数量很重要,您可能需要更改此设置。
最后,Output
将这些列粘贴在一起,引号中的任何内容都是逐行相同的。 如果您只对输出感兴趣,只需df$Output
即可调用它
data.table
方法:
library(data.table)
df <- data.table(Dose = Dose,
Gender = Gender)
df[, Level := ifelse(Dose >= high_dose, "High", "Low")]
df[, Patient := 1:100]
df[, Output := paste(Gender, Level, "Dose Patient", Patient, "has dose", Dose)]
df$Output
替代路线:
老实说,您只需使用paste
功能即可完成所有这些操作,但我认为dplyr
是逐行查看数据情况的更好方法。
paste(Gender, ifelse(Dose >= high_dose, "High", "Low"),
"Dose Patient", 1:100, "has dose", Dose)