str_remove работает с векторами и фреймами данных, но не с таблицей - PullRequest
2 голосов
/ 04 марта 2020

Пожалуйста, рассмотрите следующие три примера:

library(tidyverse)

x_vector <- c("Device=iPhone", "Device=Samsung Galaxy")
x_df <- as.data.frame(c("Device=iPhone", "Device=Samsung Galaxy"))
x_tibble <- as_tibble(c("Device=iPhone", "Device=Samsung Galaxy"))

Теперь я хочу удалить часть каждой строки, то есть подстроку «Device =». Он работает для вектора, он также работает для фрейма данных (если я укажу соответствующий столбец), но я получаю странный результат для тиббла:

(желаемый результат будет показан ниже для пример vector и df)

output_vector <- str_remove(x_vector, "Device=")
output_df <- str_remove(x_df[,1], "Device=")
output_tibble <- str_remove(x_tibble[,1], "Device=")

Может кто-нибудь объяснить, почему это не работает с тибблами и как я могу заставить его работать с тибблами?

Спасибо!

1 Ответ

1 голос
/ 04 марта 2020

Проблема в том, что tibble не будет отбрасывать размеры, когда мы делаем [,1]. Это все еще tibble с одним столбцом.

library(stringr)
class(x_tibble[,1])
#[1] "tbl_df"     "tbl"        "data.frame"   

class(x_df[,1]) 
#[1] "factor"

Вместо этого мы можем использовать [[ для извлечения столбца как вектора, потому что str_remove ожидает vector в качестве ввода (?str_remove - string - вектор ввода. Любой символ вектор или что-то принудительное к одному.)

str_remove(x_tibble[[1]], "Device=")
...