Ответ 1
У тебя это почти есть. Поместите эти два вместе:
SelectVar[, colSums(SelectVar != 0) > 0]
Это работает, потому что столбцы факторов оцениваются как числовые, >= 1.
У меня есть data.frame:
SelectVar
a b c d e f g h i j k l ll m n o p q r
1 Dxa8 Dxa8 0 Dxa8 Dxa8 0 Dxa8 Dxa8 0 0 0 0 0 0 0 0 0 Dxc8 0
2 Dxb8 Dxc8 0 Dxe8 Dxi8 0 tneg tpos 0 0 0 0 0 0 0 0 0 Dxi8 0
Я хотел бы удалить столбцы с нулевыми значениями в обеих строках из фрейма данных, поэтому он дает кадр данных, как показано ниже:
SelectVar
a b d e g h q
1 Dxa8 Dxa8 Dxa8 Dxa8 Dxa8 Dxa8 Dxc8
2 Dxb8 Dxc8 Dxe8 Dxi8 tneg tpos Dxi8
Попробовали:
SelectVar!=0
который дает True/False фрейм данных и:
SelectVar[, colSums(abs(SelectVar)) ! == 0]
что дает ошибку.
Как удалить столбцы с нулевыми значениями в каждой строке?
У тебя это почти есть. Поместите эти два вместе:
SelectVar[, colSums(SelectVar != 0) > 0]
Это работает, потому что столбцы факторов оцениваются как числовые, >= 1.
Попробуйте также
SelectVar[, !apply(SelectVar == 0, 2, all)]
Это было взято здесь:
Чтобы удалить все и все столбцы, содержащие только нули, просто передайте свой фрейм данных в следующую функцию:
remove_zero_cols <- function(df) {
rem_vec <- NULL
for(i in 1:ncol(df)){
this_sum <- summary(df[,i])
zero_test <- length(which(this_sum == 0))
if(zero_test == 6) {
rem_vec[i] <- names(df)[i]
}
}
features_to_remove <- rem_vec[!is.na(rem_vec)]
rem_ind <- which(names(df) %in% features_to_remove)
df <- df[,-rem_ind]
return(df)
}
Пример:
iris$Sepal.Width <- 0
new_df <- remove_zero_cols(iris)
print(new_df)