Усеченные уровни dataframe - tidyverse (stringr, гавань) - PullRequest
2 голосов
/ 12 марта 2019

У меня есть фрейм данных, содержащий данные анкеты с платформы онлайн-опроса.Я пытаюсь записать части этого фрейма данных в файл SPSS с haven::write_sav() у tidyverse, но у меня есть некоторые проблемы с обработкой данных, которые возятся с данными.

Дело в том, что SPSS позволяет толькопеременные уровни, которые короче 120 символов.У меня есть уровни переменных, которые превышают этот предел, что не позволяет мне записать файл *.sav с фреймом данных.

Поэтому я хотел урезать каждый возникающий уровень каждого столбца фрейма данных до <= 120 символов, чтобы убедиться, что процесс записи не прерывается, но я не могу понять, как управлять всеми уровнями из всех столбцов. </p>

Я извлекаю уровни следующим образом:

df %>%
    lapply(levels)

Но потом я просто потерял, как обращаться со списком, который я получаю взамен, тем более что большинство элементов этого списка просто не имеют никаких уровней (и им присваивается значение NULL, используя lapply).

Я пробовал что-то подобное, но потом haven::write_sav() записывает в таблицу SPSS только «1» вместо фактического значения для каждой переменной:

df <- df %>%
          as.matrix()    %>%
          str_trunc(120) %>%
          as.data.frame()

haven::write_sav(df, "test.sav")

Я ищу решение этой проблемы по-разному, если это возможно, и любая помощь высоко ценится!

1 Ответ

1 голос
/ 12 марта 2019

Мы можем использовать strtrim (base R), примененный ко всем столбцам (mutate_all)

library(dplyr)
n <- 120
df %>%
   mutate_all(strtrim, width = n)

В исходном коде OP as.data.frame преобразует его в data.frame с character столбцами по умолчанию (stringsAsFactors = TRUE) - factor с, если не указано stringsAsFactors = FALSE

...