用R中添加的字符替换因子变量的标签

Replacing labels of factor variable with added character in R

我有一个类似于下面示例数据集中的因子变量。我的实际数据集中有15个级别,每个级别都是一个区间。我想在这些整数中的每个数字(0 除外)的末尾添加一个“K”。

df <- read.table(text = "x1 x2 y
[0,60) 20 50
[0,60) 30.5 100
[120,180) 40.5 200
[120,180) 20.12 400
[120,180) 25 500
[120,180) 86 600
[540,600) 75 700
[840,900) 45 800", header = TRUE)

df$x1 <- as.factor(df$x1)

理想输出,其中每个非零数字后面都有一个“K”:

df <- read.table(text = "x1 x2 y
[0,60K) 20 50
[0,60K) 30.5 100
[120K,180K) 40.5 200
[120K,180K) 20.12 400
[120K,180K) 25 500
[120K,180K) 86 600
[540K,600K) 75 700
[840K,900K) 45 800", header = TRUE)

有什么简单的方法可以用 grepl 或其他东西做到这一点吗?

是的,我们可以这样做:

df$x1 = gsub(pattern = "([1-9][0-9]*)", replacement = "\1K", x = df$x1)
df
#            x1    x2   y
# 1     [0,60K) 20.00  50
# 2     [0,60K) 30.50 100
# 3 [120K,180K) 40.50 200
# 4 [120K,180K) 20.12 400
# 5 [120K,180K) 25.00 500
# 6 [120K,180K) 86.00 600
# 7 [540K,600K) 75.00 700
# 8 [840K,900K) 45.00 800

([1-9][0-9]*) 模式匹配 non-zero 数字(可选)后跟其他数字,因此我们匹配所有不以 0 开头的数字(因此根据需要跳过您的 0)。

将每次出现的 , 或 ) 替换为 K 后跟该字符。

transform(df, x1 = gsub("([,)])", "K\1", x1))

给予:

           x1    x2   y
1    [0K,60K) 20.00  50
2    [0K,60K) 30.50 100
3 [120K,180K) 40.50 200
4 [120K,180K) 20.12 400
5 [120K,180K) 25.00 500
6 [120K,180K) 86.00 600
7 [540K,600K) 75.00 700
8 [840K,900K) 45.00 800