通过现有对象替换数据框

时间:2019-07-01 16:51:49

标签: r subset

我有一个预定义的对象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 个答案:

答案 0 :(得分:2)

使用tidyverse,我们可以使用!!在全局环境中检查“成绩”对象,而不是在“数据”环境中的列,删除“ G”并执行{ {1}}

==

答案 1 :(得分:1)

您可以使用filter,但您可能想更改对象名称,使其与变量名称不匹配。

Grade <- "G3"

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

答案 2 :(得分:1)

您可以使用阅读器的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),]