我有一个预定义的对象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
谢谢!
答案 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),]