подмножество кадра данных существующим объектом - PullRequest
2 голосов
/ 01 июля 2019

У меня есть предопределенный объект grade <- "G3".Я хотел бы установить подкадр данных, выбрав 3 из объекта «оценка», поднабор только оценки 3.

Вот пример данных

id <- c(1,2,3,4,5)
grade <- c(3,3,4,4,5)
score <- c(10,5,10,5,10)


data <- data.frame("id"=id,"grade"=grade, "score"=score)

> data
  id grade score
1  1     3    10
2  2     3     5
3  3     4    10
4  4     4     5
5  5     5    10

Я хотел бы получить что-то вродеэто:

  > data
      id grade score
    1  1     3    10
    2  2     3     5

Спасибо!

Ответы [ 3 ]

2 голосов
/ 01 июля 2019

С помощью tidyverse мы можем использовать !! для проверки объекта 'оценка' в глобальной среде вместо столбца в среде 'данные', удалить G и выполнить ==

library(dplyr)
library(stringr)
data %>%
    filter(grade == str_remove(!!grade, "G"))
#  id grade score
#1  1     3    10
#2  2     3     5
1 голос
/ 01 июля 2019

Вы можете использовать readr parse_number для извлечения цифр из строки с минимумом суеты, а затем подмножество с результатом:

library(readr)

data[data$grade == parse_number(grade),]

Или с базовыми R sub заменить ненулевые числа на "":

data[data$grade == sub("[^0-9]", "", grade),]

Или, если единственным другим символом в вашей строке всегда является "G", тогда:

data[data$grade == sub("G", "", grade),]
1 голос
/ 01 июля 2019

Вы можете использовать filter, но вы, вероятно, захотите изменить имя объекта, чтобы оно не совпадало с именем переменной.

Grade <- "G3"

data <- data.frame("id"=id,"grade"=grade, "score"=score) %>%
  filter(paste0("G", grade) == Grade)
...