Изменение типа данных во фрейме данных

#r #excel

#r #excel

Вопрос:

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

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

Поскольку форматирование кажется проблемой, addStyle функция в openxlsx у меня не работала.

После некоторого поиска в Google я решил попробовать написать for цикл, который будет проверять каждое значение по отдельности.Я написал вложенный for цикл, который проверяет каждое значение и перезаписывает его, если это число (код приведен ниже).Кажется, это работает логически, но значения не перезаписываются, т. Е. значения, которые были сохранены в виде текста, все еще там.

 library(readxl) 
library(openxlsx)

wb<-loadWorkbook(choose.files())

data0<-as.data.frame(read_excel(choose.files(),sheet=1,range = "B1:E1131"))
data<-data0
for(i in 1:ncol(data)){
  for(j in 1:nrow(data)){
    if(is.numeric(as.numeric(data[j,i]))amp;amp;!is.na(as.numeric(data[j,i]))){
      data[j,i]<-as.numeric(data[j,i])
    }
  }
}
  

Желаемый результат:

Я хотел бы изменить данные в столбце «Расходы» (на рисунке ниже) на данные в столбце справа от него через R.

изображение

Комментарии:

1. Иногда я использую хитрость умножения на 1 ie = E1 * 1…

2. Почему бы вам просто не использовать as.numeric для целых столбцов? например df$col1 <- as.numeric(df$col1) ?

3. Вы можете использовать col_types -аргумент в readxl::read_excel() -функции для принудительного чтения текста / цифр / даты/… данные

4. @Wimpel Это, кажется, работает довольно хорошо. Сработает ли это, если, скажем, у меня есть несколько пустых ячеек или символьных ячеек в столбце, который я хотел бы сделать числовым? Кроме того, существуют ли ситуации, когда это не сработает (у меня было несколько ситуаций, когда я использовал это раньше, в большом фрагменте кода, и это не сработало).

5. @Num У меня еще не возникало проблем с пустыми ячейками. Мои производственные данные составляют более 100 тысяч строк на листе Excel. Для особых случаев; вы можете определить вектор с «пустыми» значениями, определив na -аргумент из read_excel() -функции для обработки ячеек с определенным содержимым как отсутствующих.

Ответ №1:

исходя из моего комментария:

Вы можете использовать col_types -аргумент в readxl::read_excel() -функции для принудительного чтения текста / цифр / даты/… данные