我有一个数据框。
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生成
答案 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