在数据框

时间:2017-07-20 15:07:28

标签: r dataframe

我的数据框中有一个类列,其中包含值" Bad" &安培; "良好的&#34 ;.我想将这些字符串替换为0&分别为1。

我尝试了以下内容:

 x = c("Bad", "Good", "Bad", "Bad", "Good")

factor(x)

factor(x, c(0, 1))

但是,它会将数据集中的值转换为NA

factor(x, c(0, 1))

[1] <NA> <NA> <NA> <NA> <NA>`
Levels: 0 1`

2 个答案:

答案 0 :(得分:1)

您可以使用命名向量将文本字符串映射到数值。

df <- data.frame( x = c("Bad", "Good", "Bad", "Bad", "Good"), stringsAsFactors = FALSE)

lookup <- c("Bad" = 0, "Good" = 1)

df$new_x <- lookup[df$x]

结果

df
     x new_x
1  Bad     0
2 Good     1
3  Bad     0
4  Bad     0
5 Good     1


# showing type info
str(df)
'data.frame':   5 obs. of  2 variables:
 $ x    : chr  "Bad" "Good" "Bad" "Bad" ...
 $ new_x: num  0 1 0 0 1

答案 1 :(得分:0)

方便的整数方法是使用dplyr的recode函数。

df <- data.frame(x = c("Bad", "Good", "Bad", "Bad", "Good"))
df$x <- as.factor(df$x)

library(tidyverse)
df <- df %>% 
    mutate(x = recode(x, 
                      "Bad" = "0", 
                      "Good" = "1"))

假设你想把它作为一个因子列。如果您更喜欢它是一个数字向量,您只需添加第二个mutate调用即可将其转换为数字。

df <- df %>% 
    mutate(x = recode(x, 
                      "Bad" = "0", 
                      "Good" = "1")) %>% 
    mutate(x = as.numeric(x))