如何将非数字字符串转换为R中的整数
How to convert non-numeric strings into integers in R
我有一个数据框,其中一列是一个因素。
我想将该列映射为整数。
例如,在下面的示例中,
我想将 healthy
映射到值 2
,
sick
到值 1
,
和 dead
到值 0
。
在这个例子中,状态的顺序很重要,
因为我希望状态 2 比状态 1 更健康,
状态 1 比状态 0 更健康。
x <- data.frame(id = c(1, 1, 2, 2),
day = c(1, 2, 1, 2),
state = c('healthy', 'sick', 'sick', 'dead'))
id day state
1 1 1 healthy
2 1 2 sick
3 2 1 sick
4 2 2 dead
操作数据框最简单的方法是什么x
为了获得以下输出数据帧?
id day state state_int
1 1 1 healthy 2
2 1 2 sick 1
3 2 1 sick 1
4 2 2 dead 0
您可以尝试以下方法:
> x$state_int <- as.integer(factor(x$state))
> x
id day state state_int
1 1 1 healthy 2
2 1 2 sick 3
3 2 1 sick 3
4 2 2 dead 1
但是,因子水平按名称排序并从 1 开始,因此数字与您的原始数字不完全匹配 post。
如果您确实需要匹配数字,可以尝试明确命名级别:
x$state_int <- as.integer(factor(x$state, levels=c('dead', 'sick', 'healthy'))) - 1
这应该适用于您要分配的任何随机映射
x <- data.frame(id = c(1, 1, 2, 2),
day = c(1, 2, 1, 2),
state = c('healthy', 'sick', 'sick', 'dead'))
ids <- c(1 , 2 , 0)
names(ids) <- c('healthy' , 'sick' , 'dead')
cbind(x , state_int = ids[as.character(x$state)])
# id day state state_int
#1 1 1 healthy 1
#2 1 2 sick 2
#3 2 1 sick 2
#4 2 2 dead 0
由于因子已经存储为整数,因此这是一个简单的单行代码。如果您想要特定顺序,请使用 ordered
函数。如果顺序不重要——因为它经常是——,as.numeric(x$state)
就是你所需要的!要按特定顺序回答您的问题:
x$state_num <- as.numeric(ordered(x$state, levels = c("dead", "sick", "healthy"))) -1
id day state state_num
1 1 1 healthy 2
2 1 2 sick 1
3 2 1 sick 1
4 2 2 dead 0
我有一个数据框,其中一列是一个因素。
我想将该列映射为整数。
例如,在下面的示例中,
我想将 healthy
映射到值 2
,
sick
到值 1
,
和 dead
到值 0
。
在这个例子中,状态的顺序很重要,
因为我希望状态 2 比状态 1 更健康,
状态 1 比状态 0 更健康。
x <- data.frame(id = c(1, 1, 2, 2),
day = c(1, 2, 1, 2),
state = c('healthy', 'sick', 'sick', 'dead'))
id day state
1 1 1 healthy
2 1 2 sick
3 2 1 sick
4 2 2 dead
操作数据框最简单的方法是什么x
为了获得以下输出数据帧?
id day state state_int
1 1 1 healthy 2
2 1 2 sick 1
3 2 1 sick 1
4 2 2 dead 0
您可以尝试以下方法:
> x$state_int <- as.integer(factor(x$state))
> x
id day state state_int
1 1 1 healthy 2
2 1 2 sick 3
3 2 1 sick 3
4 2 2 dead 1
但是,因子水平按名称排序并从 1 开始,因此数字与您的原始数字不完全匹配 post。
如果您确实需要匹配数字,可以尝试明确命名级别:
x$state_int <- as.integer(factor(x$state, levels=c('dead', 'sick', 'healthy'))) - 1
这应该适用于您要分配的任何随机映射
x <- data.frame(id = c(1, 1, 2, 2),
day = c(1, 2, 1, 2),
state = c('healthy', 'sick', 'sick', 'dead'))
ids <- c(1 , 2 , 0)
names(ids) <- c('healthy' , 'sick' , 'dead')
cbind(x , state_int = ids[as.character(x$state)])
# id day state state_int
#1 1 1 healthy 1
#2 1 2 sick 2
#3 2 1 sick 2
#4 2 2 dead 0
由于因子已经存储为整数,因此这是一个简单的单行代码。如果您想要特定顺序,请使用 ordered
函数。如果顺序不重要——因为它经常是——,as.numeric(x$state)
就是你所需要的!要按特定顺序回答您的问题:
x$state_num <- as.numeric(ordered(x$state, levels = c("dead", "sick", "healthy"))) -1
id day state state_num
1 1 1 healthy 2
2 1 2 sick 1
3 2 1 sick 1
4 2 2 dead 0