r - 有没有办法在 R 中存储具有数字/文本值的列?
问题描述
列大小具有以下值:“70”“S”“M”“L”“X”“60”“62”“46”“50”“54”“46”“50”“54”“60”[ 31]“NA”“50”“54”“58”“62”“44”“50”“54”“58”“44”“40”“
我正在尝试在 R 中创建一个桶列表,使“X”中的任何尺寸为 70 或更大,“L”中的任何尺寸 >= 60 和 <70,“M”中的任何尺寸 >= 50 和 <60,以及 >=40 中的任何尺寸“S”。我是 R 新手,所以我对如何做到这一点感到困惑。我有一个列名大小,其中包含此信息。这很难,因为我知道在 R 中,列只能具有数据类型。我将列大小更改为数字,但随后松开了我已有的文本值。有人能帮我吗?这是我正在使用的代码:
for (i in 1:nrow(C02E02)) {
Xb <- C02E02[i,9]
Lb <- C02E02[1,9]
if (Xb >= "70"){
laXb <-Xb
}else {
C02E02[i,9] <- c("X")
}
if (Lb >= 60 & Lb<70){
laLb <-Lb
}else {
C02E02[i,9] <- c("L")
}
}
解决方案
您可以获取只有数字的所有值的索引,将它们转换为数字并用于cut
将它们分成不同的组并为它们分配标签。
y <- x
inds <- grep('^\\d+$', y)
y[inds] <- as.character(cut(as.numeric(y[inds]),
c(0, 50, 60, 70, Inf), c('S', 'M', 'L', 'X'), right = FALSE))
y
# [1] "X" "S" "M" "L" "X" "L" "L" "S" "M" "M" "S" "M" "M" "L" "NA"
#[16] "M" "M" "M" "L" "S" "M" "M" "M" "S" "S"
为您的数据替换x
为C02E02$Size
.
数据
x <- c("70", "S", "M", "L", "X", "60", "62", "46", "50", "54", "46",
"50", "54", "60", "NA", "50", "54", "58", "62", "44", "50", "54",
"58", "44", "40")
推荐阅读
- python - 从子窗口内部访问父属性
- c++ - 是否可以从父类指针向下转换为第二个子类中的子类指针?
- python - 为什么不能在python的三元运算符中使用break?
- node.js - mongoDB/mongoose:文本搜索不适用于两个或更少字符的搜索
- html - Django 在一个基于类的视图中呈现不同的模板
- excel - 对齐数据集
- react-native - React Native,为 iOS 构建
- javascript - 更新的全局变量未传递给变量内的函数
- c# - Collider2d.bounds.Intersects 未检测到交叉点
- docker - 如何修复“列表文件/etc/apt/sources.list(组件)中格式错误的条目50”?