Конвертировать только часть столбца в числовой - PullRequest
0 голосов
/ 28 июня 2018

Мой фрейм данных выглядит как

df <- data.frame("info" = c("food", "number", "price"), 
"a" = c("Melon","1.84+", NA), 
"b" = c("Berry" ,"4.49+", "44"), 
"c" = c("Orange", NA, "4.40"), 
"d" = c("Apple","9", "1.94+"))`

Я хочу удалить все знаки плюса из чисел и изменить их на числовые.

Я пробовал

for (i in 1:nrow(df)){
     for (j in 1:ncol(df)){
          if (i > 1 & j > 1){
              df[[i,j]] <<- as.numeric(as.character(gsub("\\+", "", df[[i,j]])))
}}}

После выполнения вышеуказанного кода знаки плюс удаляются, но когда я проверяю класс на наличие числовых ячеек, R возвращает "character".

Просто интересно, есть ли у кого-нибудь идеи по этому поводу? Любая гепатит был бы оценен.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

в базе R вы можете сделать что-то вроде:

 cbind(nn=names(df[-1]),read.table(text=gsub("\\+","",do.call(paste,data.frame(t(df)))),h=T))
  nn   food number price
1  a  Melon   1.84    NA
2  b  Berry   4.49 44.00
3  c Orange     NA  4.40
4  d  Apple   9.00  1.94
0 голосов
/ 29 июня 2018

Мне кажется, что ваша ориентация на данные неверна. Вы можете преобразовать свой data.frame в более понятный формат, а затем изменить столбцы на числовые. Используя gather и spread, вы можете переупорядочить данные.

Один из вариантов использования tidyverse может быть следующим:

library(tidyverse)


df %>% gather(key, value, - info) %>%
  spread(info, value) %>%
  mutate_at(vars(number:price), funs(as.numeric(gsub("\\+", "",.))))

#Result -- Its same data but represented in slightly different way.

#   key   food number price
# 1   a  Melon   1.84    NA
# 2   b  Berry   4.49 44.00
# 3   c Orange     NA  4.40
# 4   d  Apple   9.00  1.94

Данные:

df <- data.frame("info" = c("food", "number", "price"), 
                 "a" = c("Melon","1.84+", NA), 
                 "b" = c("Berry" ,"4.49+", "44"), 
                 "c" = c("Orange", NA, "4.40"), 
                 "d" = c("Apple","9", "1.94+"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...