用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
我有一个类似于下面示例数据集中的因子变量。我的实际数据集中有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