Изучение R: Как вывести элемент определенных элементов вектора y с индексами, которые соответствуют определенным векторам x? - PullRequest
0 голосов
/ 16 мая 2018

Итак, у меня есть два вектора: доза и пол. Доза - это вектор с числами, длина которых равна 100, а пол - это вектор со значениями «женский» и «мужской», который также имеет длину 100. Как бы я вывел что-то наподобие приведенного ниже образца, если я определю, что такое высокая доза (т. Е. Высокая доза составляет 40, 50, 60 и т. Д.), И мне нужны только пациенты женского пола?

Пример вывода

[1] «У пациентки с высокой дозой 1» - 63 »

[1] «Пациентка с высокой дозой 2 у женщины имеет дозу 70»

[1] «Пациентка с высокой дозой 3 у женщины имеет дозу 63,07»

[1] «Пациентка с высокой дозой 4 у женщины имеет дозу 58»

[1] «Пациентка с высокой дозой 5 у женщины имеет дозу 75,25»

1 Ответ

0 голосов
/ 16 мая 2018

Итак, сначала позвольте мне создать фиктивные данные для 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)
...