使用 if 函数将数据框中的字符更改为数字
Changing characters in a data frame to numeric with if-function
例如,我有这个数据框,我想将字符更改为数字:
x<-c("a","b","c","a","a","a","c","b","b","a","c","a","b","b","c")
y<-rnorm(15)
z<-rnorm(15)
data<-data.frame(x,y,z)
我是这样知道的:
data$x<-factor(data$x,levels = c("a","b","c"),labels = c(1,2,3))
但是如果我有更多的角色,那将需要很多时间。我想了解如何使用 if-function 更改它。
我们可以直接使用
as.numeric(data$x)
#[1] 1 2 3 1 1 1 3 2 2 1 3 1 2 2 3
如果需要在出现unique
个元素时进行编码
as.numeric(factor(data$x, levels = unique(data$x)))
#[1] 1 2 3 1 1 1 3 2 2 1 3 1 2 2 3
如果我们可以使用包,data.table
中的 .GRP
会有所帮助
library(data.table)
setDT(data)[, x1 := .GRP , x]
这项工作不依赖于以下因素:
library(dplyr)
data %>%
mutate(x = group_indices(.,x))
# A tibble: 15 x 3
x y z
<int> <dbl> <dbl>
1 1 1.61 0.865
2 2 -0.424 -0.939
3 3 -0.773 -0.558
4 1 0.108 0.336
5 1 -0.219 1.82
例如,我有这个数据框,我想将字符更改为数字:
x<-c("a","b","c","a","a","a","c","b","b","a","c","a","b","b","c")
y<-rnorm(15)
z<-rnorm(15)
data<-data.frame(x,y,z)
我是这样知道的:
data$x<-factor(data$x,levels = c("a","b","c"),labels = c(1,2,3))
但是如果我有更多的角色,那将需要很多时间。我想了解如何使用 if-function 更改它。
我们可以直接使用
as.numeric(data$x)
#[1] 1 2 3 1 1 1 3 2 2 1 3 1 2 2 3
如果需要在出现unique
个元素时进行编码
as.numeric(factor(data$x, levels = unique(data$x)))
#[1] 1 2 3 1 1 1 3 2 2 1 3 1 2 2 3
如果我们可以使用包,data.table
中的 .GRP
会有所帮助
library(data.table)
setDT(data)[, x1 := .GRP , x]
这项工作不依赖于以下因素:
library(dplyr)
data %>%
mutate(x = group_indices(.,x))
# A tibble: 15 x 3
x y z
<int> <dbl> <dbl>
1 1 1.61 0.865
2 2 -0.424 -0.939
3 3 -0.773 -0.558
4 1 0.108 0.336
5 1 -0.219 1.82