将数据帧的元素转换为二进制数据

时间:2017-08-22 15:45:30

标签: r

我有一个数据框。

zz <- "col1 col2 col3 
1          A         B          C
2          A         B          C
3          A         B          A
4          A         C          A
5          B         B          A
6          B         B          A"

Data <- read.table(text=zz, header = TRUE)

每列只有两个值。我想将最常值转换为0,将最不常见的值转换为1。我想将此应用于所有列,如下所示:

zz <- "col1 col2 col3 
1          1         1          0
2          1         1          0
3          1         1          1
4          1         0          1
5          0         1          1
6          0         1          1"

我试过了:

for (i in 1:3){
  Data[[i]][[names(sort(summary(as.factor(Data[[i]])),decreasing=TRUE)[1])]] <- 0
  Data[[i]][[names(sort(summary(as.factor(Data[[i]])),decreasing=TRUE)[2])]] <- 1
}

但得到:

  

[[<-.data.frame中的错误(*tmp*,i,值= c(2L,2L,2L,2L,2L,2L,:     替换有12行,数据有11个De加:警告信息:   在[[<-.factor*tmp*中,名称(sort(summary(as.factor(df.matrix_binary [[i]])),:     无效因子水平,NA生成

3 个答案:

答案 0 :(得分:3)

你可以尝试:

export default {
  methods: {
    handleScroll (event) {
      // Any code to be executed when the window is scrolled
    }
  },
  created () {
    window.addEventListener('scroll', this.handleScroll);
  },
  destroyed () {
    window.removeEventListener('scroll', this.handleScroll);
  }
}

请注意,根据您发布的数据,我假设您在每列中只有2个值,因此如果您的值超过2,则不会执行任何错误处理。但是,如果您的列具有两个以上的值,则可以轻松修改它。

答案 1 :(得分:1)

以下是tidyverse

的一个选项
library(dplyr)
library(forcats)
Data %>%
   mutate_all(funs(match(., fct_count(., sort = TRUE)$f[1], nomatch = 0)))
#     col1 col2 col3
#1    1    1    0
#2    1    1    0
#3    1    1    1
#4    1    0    1
#5    0    1    1
#6    0    1    1

答案 2 :(得分:0)

sapply(Data, function(x) as.numeric(x == levels(x)[order(-tabulate(x))][1]))
#     col1 col2 col3
#[1,]    1    1    0
#[2,]    1    1    0
#[3,]    1    1    1
#[4,]    1    0    1
#[5,]    0    1    1
#[6,]    0    1    1