我有一个数据框,其中包含来自在线调查平台的问卷数据。我试图用tidyverse的haven::write_sav()将这些数据帧的一部分写入到SPSS文件中,但是我遇到了一些数据争论的问题,这就是对数据的干扰。
问题是,SPSS只允许小于120个字符的可变级别。我的变量级别超过了这个限制,这不允许我使用数据帧编写*.sav文件。
因此,我的想法是将每个dataframe列的每个出现级别截断为<= 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")我正在寻找这个问题的整齐解决方案,如果可能的话,任何帮助都是非常感谢的!
发布于 2019-03-12 22:01:01
我们可以在所有列上应用strtrim (base R) (mutate_all)
library(dplyr)
n <- 120
df %>%
mutate_all(strtrim, width = n)在OP的原始代码中,as.data.frame将其转换为data.frame,缺省情况下(stringsAsFactors = TRUE)列是factor,除非使用stringsAsFactors = FALSE指定
https://stackoverflow.com/questions/55123042
复制相似问题