r - 如何正确地在 RStudio 中进行子集化?
问题描述
我创建了以下数据框:
age <- c(21,35,829,2)
sex <- c("m","f","m","c")
height <- c(181,173,171,166)
weight <- c(69,58,75,60)
dat <- as.data.frame(cbind(age,sex,height,weight), stringsAsFactors = FALSE)
dat$age <- as.numeric(age)
dat
我现在只想选择 20 岁以上或 80 岁以下的学生行。
为什么这样做:dat[dat$age<20| dat$age>80,] ; subset(dat, age < 20 | age > 80)
但这不会:dat[dat$age>20| dat$age<80,] ; subset(dat, age > 20 | age < 80)
我可以对不小于 80 岁或不大于 20 岁的行进行子集化,但不能对实际处于此区间的行进行子集化。
错误是什么?
提前致谢。
解决方案
因为你的条件基本上允许每个可能的年龄。想想看,您的条件是独立的(因为您使用的是|
运算符),因此符合您的条件之一的每一行都由您的过滤器选择。现在在您的 data.frame 中定义的每个年龄都高于 20,或者如果不是,它们肯定低于 80。
如果您想选择年龄在 20 到 80 岁之间的每一行,您将更改逻辑运算符。要使这些条件依赖,如下所示:
dat[dat$age>20 & dat$age<80,]
subset(dat, age > 20 & age < 80)
结果如下:
age sex height weight
1 21 m 181 69
2 35 f 173 58
现在,如果要选择此间隔之外的所有行,则可以使用!
运算符否定此逻辑条件,就像 @r2evans 在评论部分中建议的那样。它会是这样的:
dat[!(dat$age > 20 & dat$age < 80),]
subset(dat, !(age > 20 & age < 80))
结果如下:
age sex height weight
3 829 m 171 75
4 2 c 166 60
推荐阅读
- reactjs - 如何从 React 挂钩访问功能组件的名称?
- nginx - Varnish Cache 中的 Web root 选项,类似于 nginx 中的 `root`
- javascript - 为什么 for 循环显示未定义的结果?
- smooch - 将 Smooch 与代理平台连接
- unity3d - 如何在 Unity 中手动设置 Toggle UI 可交互大小?
- r - 如何找到数据框中的内容而不是R中的其他内容
- javascript - TypeError:重复声明,Typescript 项目中的模块构建失败错误
- css - 在图像悬停时显示产品标题
- python - 如何在一段时间后将 Active True 的布尔值更改为 false
- visual-studio-code - VS Code 编辑器,取消链接资源管理器窗格和编辑器选项卡