Как использовать функцию sprintf () для форматирования столбцов в R - PullRequest
0 голосов
/ 20 марта 2020

Я новичок ie и учусь на R. Пожалуйста, примите мои извинения за глупые вопросы. Я застрял с ошибкой и не могу понять, что именно? «Ошибка в [.data.frame: выбраны неопределенные столбцы»

Может кто-нибудь помочь мне с этим, пожалуйста? Когда я использую следующее: sprintf("%s", "Return (%)") Он работал нормально и правильно отображал таблицу для меня.

Но если я использую sprintf("%.1f", "Return (%)"), это выдает ошибку с "Error in sprintf: invalid format '%.1f'; use format %s for character objects"

Теперь, Я преобразовал столбец в цифру c с sprintf("%.1f", as.numeric("Return (%)")). Затем я снова получаю ошибку ниже:

"Error in [.data.frame: undefined columns selected"

1 Ответ

0 голосов
/ 20 марта 2020

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

Первая функция sprintf() не работает, поскольку она интерпретирует "Return (%)" как текст и, следовательно, генерирует ошибку неверного формата.

Вторая функция sprintf() завершается ошибкой, поскольку as.numeric("Return (%)") анализируется как неполная ссылка на столбец во фрейме данных.

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

1. dataframe[rows,columns]
2. dataframe[,"columnName"]
3. dataframe[["columnName"]]
4. dataframe$columnName 

Поскольку столбцы могут ссылаться по имени или положению (слева направо), один Чтобы решить проблему, описанную в вопросе, используйте номер столбца с оператором извлечения для ссылки на столбец процентного возврата, как показано ниже.

textFile <- "symbol,Return (%)
AAPL,23.1
GOOG,30.5
IBM,11.8
MSFT,14"

stockReturns <- read.csv(text=textFile) 

# version that works: Return (%) is second column in data frame
sprintf("%.1f",stockReturns[,2])

... и вывод:

> sprintf("%.1f",stockReturns[,2])
[1] "23.1" "30.5" "11.8" "14.0"
>

Почему произошла ошибка?

Когда мы печатаем фрейм данных, мы видим, как R анализировал имя столбца при чтении заголовка через read.csv().

stockReturns

> stockReturns
  symbol Return....
1   AAPL       23.1
2   GOOG       30.5
3    IBM       11.8
4   MSFT       14.0
>

Интересно! R преобразует пробел и специальные символы в ..... Теперь давайте попробуем sprintf() еще раз с тем, как R интерпретировал имя столбца, и с формой [[ оператора извлечения.

> sprintf("%.1f", stockReturns[["Return...."]])
[1] "23.1" "30.5" "11.8" "14.0"
>

Теперь, когда мы знаем, что проблема вызвана специальными символами в имени столбца, мы можем использовать функцию colnames(), чтобы переименовать имя столбца Return (%) во что-то, на что мы можем более легко ссылаться в R код. Это позволяет использовать несколько форм оператора извлечения для доступа к столбцу из фрейма данных.

colnames(stockReturns) <- c("symbol","return_pct")
sprintf("%.1f",stockReturns[["return_pct"]])
sprintf("%.1f",stockReturns$return_pct)
sprintf("%.1f",stockReturns[,"return_pct"])

... и вывод:

> colnames(stockReturns) <- c("symbol","return_pct")
> sprintf("%.1f",stockReturns[["return_pct"]])
[1] "23.1" "30.5" "11.8" "14.0"
> sprintf("%.1f",stockReturns$return_pct)
[1] "23.1" "30.5" "11.8" "14.0"
> sprintf("%.1f",stockReturns[,"return_pct"])
[1] "23.1" "30.5" "11.8" "14.0"
>

Примечание: этот ответ ссылается на содержание из моей статьи блога, Формы оператора извлечения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...