我有一个数据框,其中包含来自在线调查平台的问卷调查数据。我正在尝试使用tidyverse的haven::write_sav()
将此数据帧的一部分写入SPSS文件,但是我遇到了一些数据争用问题,这些问题正困扰着数据。
问题是,SPSS仅允许小于120个字符的可变级别。我的变量级别超过了此限制,这使我无法使用数据帧写入*.sav
文件。
所以我的想法是将每个数据框列的每个出现的级别截断为<= 120个字符,以确保写入过程不会中断,但是我不知道如何操作所有列的所有级别。
我正在提取这样的水平:
df %>%
lapply(levels)
但是此后,我只是迷失了如何处理返回的列表,特别是因为该列表的大多数元素根本没有任何级别(并且使用lapply分配了NULL)。
我已经尝试过类似的方法,但是随后haven::write_sav()
仅将“ 1”而不是每个变量的实际值写入SPSS电子表格:
df <- df %>%
as.matrix() %>%
str_trunc(120) %>%
as.data.frame()
haven::write_sav(df, "test.sav")
如果可能的话,我正在寻找一种解决该问题的方法,我们将不胜感激!
答案 0 :(得分:1)
我们可以使用应用于所有列(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
s与stringsAsFactors = FALSE