R:根据另一列中的值对列进行分类(存在相同的字符)
R: Categorizing column dependent on value in another column (same characters exist)
我确信有一个非常简单的解决方案,但考虑到我是 R 的新手,我有点难过。
我有一个大型数据集,数据结构相应。
v1
1 US2
2 L1_US24
3 US2_0
4 US24
5 US245
6 US245
7 US24 L
8 US3
我想做的是根据 v1 中的值创建一个分类列,如下所示:
v1 Cat
1 US2 1
2 L1_US24 2
3 US2_0 1
4 US24 2
5 US245 3
6 US245 3
7 US24 L 2
8 US3 4
现在,如果它是二元选择,我可以很容易地使用 'grepl' 和 'ifelse' 来相应地分配值。但是,我不确定这是否是在列中包含相同值的大型数据集中执行此操作的有效方法。
谁能提供一些关于如何达到预期结果的建议?
您可以转换为因子,然后再转换为数值:
df$Cat <- as.numeric(factor(df$v1, levels = unique(df$v1)))
df
v1 Cat
1 US2 1
2 US24 2
3 US2 1
4 US24 2
5 US245 3
6 US245 3
7 US243 4
8 US3 5
请找到一个更通用的解决方案,以应对您遇到的不同情况。
Reprex
只有 Base R
的解决方案
- 代码
# Extract codes 'USXXX'
code <- regmatches(df$V1, regexpr("US\d+", df$V1))
# Convert codes into numeric categories and add the in the 'Cat' column
df$Cat <- as.numeric(factor(code, levels = unique(code)))
- 输出
df
#> V1 Cat
#> 1 US2 1
#> 2 L1_US24 2
#> 3 US2_0 1
#> 4 US24 2
#> 5 US245 3
#> 6 US245 3
#> 7 US24 L 2
#> 8 US3 4
解决方案使用stringr
- 代码
# Extract codes 'USXXX'
code <- stringr::str_extract(df$V1, "US\d+")
# Convert codes into numeric categories and add them in the 'Cat' column
df$Cat <- as.numeric(factor(code, levels = unique(code)))
- 输出
df
#> V1 Cat
#> 1 US2 1
#> 2 L1_US24 2
#> 3 US2_0 1
#> 4 US24 2
#> 5 US245 3
#> 6 US245 3
#> 7 US24 L 2
#> 8 US3 4
- 数据
df <- data.frame(V1 = c("US2", "L1_US24", "US2_0", "US24", "US245", "US245", "US24 L", "US3"))
由 reprex package (v2.0.1)
创建于 2022-02-04
我确信有一个非常简单的解决方案,但考虑到我是 R 的新手,我有点难过。
我有一个大型数据集,数据结构相应。
v1
1 US2
2 L1_US24
3 US2_0
4 US24
5 US245
6 US245
7 US24 L
8 US3
我想做的是根据 v1 中的值创建一个分类列,如下所示:
v1 Cat
1 US2 1
2 L1_US24 2
3 US2_0 1
4 US24 2
5 US245 3
6 US245 3
7 US24 L 2
8 US3 4
现在,如果它是二元选择,我可以很容易地使用 'grepl' 和 'ifelse' 来相应地分配值。但是,我不确定这是否是在列中包含相同值的大型数据集中执行此操作的有效方法。
谁能提供一些关于如何达到预期结果的建议?
您可以转换为因子,然后再转换为数值:
df$Cat <- as.numeric(factor(df$v1, levels = unique(df$v1)))
df
v1 Cat
1 US2 1
2 US24 2
3 US2 1
4 US24 2
5 US245 3
6 US245 3
7 US243 4
8 US3 5
请找到一个更通用的解决方案,以应对您遇到的不同情况。
Reprex
只有 Base R
的解决方案
- 代码
# Extract codes 'USXXX'
code <- regmatches(df$V1, regexpr("US\d+", df$V1))
# Convert codes into numeric categories and add the in the 'Cat' column
df$Cat <- as.numeric(factor(code, levels = unique(code)))
- 输出
df
#> V1 Cat
#> 1 US2 1
#> 2 L1_US24 2
#> 3 US2_0 1
#> 4 US24 2
#> 5 US245 3
#> 6 US245 3
#> 7 US24 L 2
#> 8 US3 4
解决方案使用stringr
- 代码
# Extract codes 'USXXX'
code <- stringr::str_extract(df$V1, "US\d+")
# Convert codes into numeric categories and add them in the 'Cat' column
df$Cat <- as.numeric(factor(code, levels = unique(code)))
- 输出
df
#> V1 Cat
#> 1 US2 1
#> 2 L1_US24 2
#> 3 US2_0 1
#> 4 US24 2
#> 5 US245 3
#> 6 US245 3
#> 7 US24 L 2
#> 8 US3 4
- 数据
df <- data.frame(V1 = c("US2", "L1_US24", "US2_0", "US24", "US245", "US245", "US24 L", "US3"))
由 reprex package (v2.0.1)
创建于 2022-02-04