转换数据帧

时间:2017-04-14 08:08:29

标签: r

我有以下数据框

col1 <- c("A","B", "A")
col2 <- c("C","D","D")
col3 <- c("E","E","E")
col4 <- c("F","F","H")
x <- data.frame(col1,col2,col3,col4)

上述框架的输出为:

1

我想将字符替换为数字,如下所示:

2

4 个答案:

答案 0 :(得分:4)

这是基础R中的单行,可以使用任意数量的列和任何名称 - 没有任何硬编码,因此它适用于任何x

> setNames(data.frame(matrix(as.numeric(unlist(x)),ncol=ncol(x))),names(x))
  col1 col2 col3 col4
1    1    3    5    6
2    2    4    5    6
3    1    4    5    7

答案 1 :(得分:2)

x <- x %>% 
     unlist %>% 
     as.numeric %>% 
     matrix(ncol=4) %>% 
     data.frame
names(x) <- paste0("col", 1:4)
x

  col1 col2 col3 col4
1    1    3    5    6
2    2    4    5    6
3    1    4    5    7

答案 2 :(得分:2)

以下是基础R的解决方案:

x[] <- match(as.matrix(x), unique(c(as.matrix(x))))
# > x
#   col1 col2 col3 col4
# 1    1    3    5    6
# 2    2    4    5    6
# 3    1    4    5    7

这是一个较短的解决方案:

x[] <- as.integer(unlist(x))

数据:

x <- data.frame(col1=c("A","B", "A"), col2=c("C","D","D"), col3=c("E","E","E"), col4=c("F","F","H")

答案 3 :(得分:1)

我们可以使用lapply

中的base R
x[] <- lapply(x, match, LETTERS)
x
#  col1 col2 col3 col4
#1    1    3    5    6
#2    2    4    5    6
#3    1    4    5    8