Удалять столбцы в зависимости от значений ячеек в матрице и избавляться от ошибки индекса за пределами границ - PullRequest
0 голосов
/ 19 февраля 2020

У меня проблема с тем, что я должен удалить определенные столбцы в файле Excel в зависимости от значений некоторых ячеек, используя R.

  1. Я импортировал файл Excel

    data = as.matrix(read.csv('data.csv', header = FALSE))
    
  2. Размеры матрицы: dim(data) = 106474 * 81

  3. Что мне нужно сделать

    • Если значение в любой из ячеек [row = 1, column = i] = 'A' -> удалить столбец
    • Если значение в любой из ячеек [row = 1, column = i] = 'B' -> удалить столбец
    • Если значение в любой из ячеек [row = 2, column = i] > 30 -> удалить столбец
  4. Что я сделал до сих пор

    for (i in 1:ncol(data)) { 
      if (data[1,i]=='A') {
        data =  data [,-i]
      } else if (data[1,i]=='B') {
        data =  data [,-i]
      } else if (data[2,i] > 30) {
        data =  data [,-i]
      } 
    }
    
  5. Проблемы, с которыми я столкнулся, следующие:

    1. Когда я читать матрицу до r, она читается как символы? как преобразовать строку данных [2, i] в число c. Я представил, как я преобразовал его в цифру c. Но есть ли лучший способ?

      row2 = as.numeric(as.matrix(fly_data[2,])) 
      fly_data[2,] <- row2
      
    2. Мой для l oop заканчивается внезапно и не достигает полной длины

      ncol(data) 
      
    3. Всегда выдает

      Ошибка в данных [1, i]: индекс за пределами границ

1 Ответ

0 голосов
/ 19 февраля 2020

Может быть, вы можете попробовать код ниже

r <- subset(data, select = -which(as.character(unlist(data[1,]))%in% c("A","B") | as.numeric(as.character(unlist(data[2,])))>30))

такой, что

> r 
   X2 X3 X7
r1  D  C  C
r2  6 24 25

ДАННЫЕ

data <- structure(list(X1 = structure(2:1, .Names = c("r1", "r2"), .Label = c("7", 
"A"), class = "factor"), X2 = structure(2:1, .Names = c("r1", 
"r2"), .Label = c("6", "D"), class = "factor"), X3 = structure(2:1, .Names = c("r1", 
"r2"), .Label = c("24", "C"), class = "factor"), X4 = structure(2:1, .Names = c("r1", 
"r2"), .Label = c("13", "A"), class = "factor"), X5 = structure(2:1, .Names = c("r1", 
"r2"), .Label = c("27", "B"), class = "factor"), X6 = structure(2:1, .Names = c("r1", 
"r2"), .Label = c("17", "A"), class = "factor"), X7 = structure(2:1, .Names = c("r1", 
"r2"), .Label = c("25", "C"), class = "factor"), X8 = structure(2:1, .Names = c("r1", 
"r2"), .Label = c("35", "C"), class = "factor"), X9 = structure(2:1, .Names = c("r1", 
"r2"), .Label = c("13", "B"), class = "factor"), X10 = structure(2:1, .Names = c("r1", 
"r2"), .Label = c("27", "B"), class = "factor")), class = "data.frame", row.names = c("r1", 
"r2"))

> data
   X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
r1  A  D  C  A  B  A  C  C  B   B
r2  7  6 24 13 27 17 25 35 13  27
...