模式匹配以在 R 中创建一个新列
Pattern Matching to create a new column in R
我有一个数据 table 如下所示:
library(data.table)
DF <- as.data.table(list(ID = c(125534,"122-343",312343,"12343-343FGV", 1234, 713827), Product = c('Y', NA, NA, 'Z', NA, NA), Type = c(NA, 'D', 'G', NA, NA, NA)))
ID Product Type
1: 125534 Y NA
2: 122-343 NA D
3: 312343 NA G
4: 12343-343FGV Z NA
5: 1234 NA NA
6: 713827 NA NA
我想根据 ID 的分类方式创建一个名为 CATEGORY 的新列。
我的错误代码如下所示:
DF$CATEGORY <- ifelse(grepl("^12[0-9]|^31[0-9]|", DF$ID), 'IN', 'OUT')
想要的结果:
ID Product Type CATEGORY
1: 125534 Y NA IN
2: 122-343 NA D OUT
3: 312343 NA G IN
4: 12343-343FGV Z NA OUT
5: 1234 NA NA OUT
6: 713827 NA NA OUT
我想对其进行编码,以便任何包含字母或符号、短于 6 个字符且不以 12 或 31 开头的 ID 都被淘汰。剩下的在.
我想你是这个意思:
DF[, CATEGORY := ifelse(grepl("[^0-9]", ID) |
nchar(ID) < 6 |
!grepl("^12|^31", ID),
"OUT", "IN")]
我们还可以通过创建具有 "OUT" 值的 'CATEGORY' 列,然后指定 'i' 具有仅匹配 "IN" 案例条件的逻辑索引来做到这一点并将 :=
) 'CATEGORY' 分配给 "IN"
DF[, CATEGORY := "OUT"][grepl("^(12|31)[0-9]{4,}$", ID), CATEGORY := "IN"]
DF
# ID Product Type CATEGORY
#1: 125534 Y NA IN
#2: 122-343 NA D OUT
#3: 312343 NA G IN
#4: 12343-343FGV Z NA OUT
#5: 1234 NA NA OUT
#6: 713827 NA NA OUT
我有一个数据 table 如下所示:
library(data.table)
DF <- as.data.table(list(ID = c(125534,"122-343",312343,"12343-343FGV", 1234, 713827), Product = c('Y', NA, NA, 'Z', NA, NA), Type = c(NA, 'D', 'G', NA, NA, NA)))
ID Product Type
1: 125534 Y NA
2: 122-343 NA D
3: 312343 NA G
4: 12343-343FGV Z NA
5: 1234 NA NA
6: 713827 NA NA
我想根据 ID 的分类方式创建一个名为 CATEGORY 的新列。 我的错误代码如下所示:
DF$CATEGORY <- ifelse(grepl("^12[0-9]|^31[0-9]|", DF$ID), 'IN', 'OUT')
想要的结果:
ID Product Type CATEGORY
1: 125534 Y NA IN
2: 122-343 NA D OUT
3: 312343 NA G IN
4: 12343-343FGV Z NA OUT
5: 1234 NA NA OUT
6: 713827 NA NA OUT
我想对其进行编码,以便任何包含字母或符号、短于 6 个字符且不以 12 或 31 开头的 ID 都被淘汰。剩下的在.
我想你是这个意思:
DF[, CATEGORY := ifelse(grepl("[^0-9]", ID) |
nchar(ID) < 6 |
!grepl("^12|^31", ID),
"OUT", "IN")]
我们还可以通过创建具有 "OUT" 值的 'CATEGORY' 列,然后指定 'i' 具有仅匹配 "IN" 案例条件的逻辑索引来做到这一点并将 :=
) 'CATEGORY' 分配给 "IN"
DF[, CATEGORY := "OUT"][grepl("^(12|31)[0-9]{4,}$", ID), CATEGORY := "IN"]
DF
# ID Product Type CATEGORY
#1: 125534 Y NA IN
#2: 122-343 NA D OUT
#3: 312343 NA G IN
#4: 12343-343FGV Z NA OUT
#5: 1234 NA NA OUT
#6: 713827 NA NA OUT