Как изменить факторные столбцы на числовые столбцы - PullRequest
0 голосов
/ 22 октября 2019

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

head(IBOV)
          Date      Price       Open       High        Low  Vol. Change..
1 Oct 18, 2019 104,784.74 105,011.71 105,464.25 104,524.97 2.84M   -0.22%
2 Oct 17, 2019 105,015.77 105,388.63 105,891.19 104,826.61 4.19M   -0.39%
3 Oct 16, 2019 105,422.80 104,485.87 105,462.07 103,521.08 4.51M    0.89%
4 Oct 15, 2019 104,489.56 104,298.53 105,047.62 104,052.48 4.09M    0.18%
5 Oct 14, 2019 104,301.58 103,833.59 104,304.85 103,438.47 2.99M    0.45%
6 Oct 11, 2019 103,831.92 101,818.60 104,380.89 101,818.60 4.35M    1.98%

Я попытался изменить столбец 2 на 5 с помощью этого кода:

IBOV[ ,2:5] <- as.numeric(gsub(",", "", IBOV[ ,2:5]))

Ноон возвращает их все как NA, и это сообщение:

IBOV [, 2: 5] <- as.numeric (gsub (",", "", IBOV [, 2: 5])) Предупреждающее сообщение: NA введены по принуждению </p>

head (IBOV) Дата Цена Открыть Высокий Низкий Vol. Изменение .. 1 18 октября 2019 г. NA NA NA NA 2,84M -0,22% 2 17 октября 2019 г. NA NA NA NA 4,19M -0,39% 3 16 октября 2019 NA NA NA NA 4,51M 0,89% 4 15 октября 2019 г. NANA NA NA 4,09M 0,18% 5 14 октября 2019 г. NA NA NA NA 2,99M 0,45% 6 октября 11, 2019 NA NA NA NA 4,35M 1,98%

Что я делаю не так?

1 Ответ

0 голосов
/ 23 октября 2019

Действуйте следующим образом:

Шаг 1: ваши данные (при отсутствии воспроизводимых данных вот некоторые фиктивные данные):

set.seed(12)
df <- data.frame(
  var1 = sample(1:10, 3),
  var2 = c("2,130.34", "1,000.01", "20,999.55"),
  var3 = c("23%", "-1.45%", "12.88%")
)
df
  var1      var2   var3
1    1  2,130.34    23%
2    8  1,000.01 -1.45%
3    9 20,999.55 12.88%

Шаг 2: str показывает, что выиметь два фактора:

str(df)
'data.frame':   3 obs. of  3 variables:
 $ var1: int  1 8 9
 $ var2: Factor w/ 3 levels "1,000.01","2,130.34",..: 2 1 3
 $ var3: Factor w/ 3 levels "-1.45%","12.88%",..: 3 1 2

Шаг 3: преобразовать коэффициенты в символы, используя lapply:

df[,2:3] <- lapply(df[,2:3], as.character)

Шаг 4: удалить запятые и знаки процента:

df[,2:3] <- lapply(df[,2:3], function(x) gsub(",|%", "", x))
df
  var1     var2  var3
1    1  2130.34    23
2    8  1000.01 -1.45
3    9 20999.55 12.88

Шаг 5: преобразовать в числовое значение:

df[,2:3] <- lapply(df[,2:3], as.numeric)

Шаг 6: проверить преобразование:

(str(df)
'data.frame':   3 obs. of  3 variables:
 $ var1: int  1 8 9
 $ var2: num  2130 1000 21000
 $ var3: num  23 -1.45 12.88
...