在 R 中创建一个由级别名称填充的新列
Create a new column populated by level names in R
我有一个包含一列整数的 R 数据框。此列有一组级别:
my_data <- data.frame(x=c(1,2,3,1,2,3,1,2,3))
levels(my_data$x) <- c("group1", "group2", "group3")
我如何创建一个新的角色列来填充关卡名称?期望的输出:
> my_data
x y
1 1 group1
2 2 group2
3 3 group3
4 1 group1
5 2 group2
6 3 group3
7 1 group1
8 2 group2
9 3 group3
列 'x' 是添加了附加属性 levels
的数字列(本身不是 factor
列)
str(my_data$x)
num [1:9] 1 2 3 1 2 3 1 2 3
- attr(*, "levels")= chr [1:3] "group1" "group2" "group3"
因此我们使用 'x' 值(按顺序)作为 levels
属性的索引
library(dplyr)
my_data <- my_data %>%
mutate(y = levels(x)[x])
-输出
my_data
x y
1 1 group1
2 2 group2
3 3 group3
4 1 group1
5 2 group2
6 3 group3
7 1 group1
8 2 group2
9 3 group3
或在base R
mydata$y <- with(my_data, levels(x)[x])
如果'x'的值不同,使用match
mydata$y <- with(my_data, levels(x)[match(x, unique(x))])
你可以这样做:
my_data <- transform(my_data, y = factor(x, label = levels(x)))
x y
1 1 group1
2 2 group2
3 3 group3
4 1 group1
5 2 group2
6 3 group3
7 1 group1
8 2 group2
9 3 group3
请注意,使用此方法,x
不必是索引,即 1,2,3
,但可以是任何内容。往下看:
my_data1 <- data.frame(x=c(1,2,3,1,2,3,1,2,3) + 10)
levels(my_data1$x) <- c("group1", "group2", "group3")
transform(my_data1, y = factor(x, label = levels(x)))
x y
1 11 group1
2 12 group2
3 13 group3
4 11 group1
5 12 group2
6 13 group3
7 11 group1
8 12 group2
9 13 group3
我有一个包含一列整数的 R 数据框。此列有一组级别:
my_data <- data.frame(x=c(1,2,3,1,2,3,1,2,3))
levels(my_data$x) <- c("group1", "group2", "group3")
我如何创建一个新的角色列来填充关卡名称?期望的输出:
> my_data
x y
1 1 group1
2 2 group2
3 3 group3
4 1 group1
5 2 group2
6 3 group3
7 1 group1
8 2 group2
9 3 group3
列 'x' 是添加了附加属性 levels
的数字列(本身不是 factor
列)
str(my_data$x)
num [1:9] 1 2 3 1 2 3 1 2 3
- attr(*, "levels")= chr [1:3] "group1" "group2" "group3"
因此我们使用 'x' 值(按顺序)作为 levels
属性的索引
library(dplyr)
my_data <- my_data %>%
mutate(y = levels(x)[x])
-输出
my_data
x y
1 1 group1
2 2 group2
3 3 group3
4 1 group1
5 2 group2
6 3 group3
7 1 group1
8 2 group2
9 3 group3
或在base R
mydata$y <- with(my_data, levels(x)[x])
如果'x'的值不同,使用match
mydata$y <- with(my_data, levels(x)[match(x, unique(x))])
你可以这样做:
my_data <- transform(my_data, y = factor(x, label = levels(x)))
x y
1 1 group1
2 2 group2
3 3 group3
4 1 group1
5 2 group2
6 3 group3
7 1 group1
8 2 group2
9 3 group3
请注意,使用此方法,x
不必是索引,即 1,2,3
,但可以是任何内容。往下看:
my_data1 <- data.frame(x=c(1,2,3,1,2,3,1,2,3) + 10)
levels(my_data1$x) <- c("group1", "group2", "group3")
transform(my_data1, y = factor(x, label = levels(x)))
x y
1 11 group1
2 12 group2
3 13 group3
4 11 group1
5 12 group2
6 13 group3
7 11 group1
8 12 group2
9 13 group3