学习 R:如何使用对应于某些 x 向量的索引输出某些 y 向量元素的元素?



所以我有两个向量,剂量和性别。剂量是长度为 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)

最新更新