首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >截断dataframe - tidyverse的级别(stringr,haven)

截断dataframe - tidyverse的级别(stringr,haven)
EN

Stack Overflow用户
提问于 2019-03-12 21:47:24
回答 1查看 170关注 0票数 2

我有一个数据框,其中包含来自在线调查平台的问卷数据。我试图用tidyverse的haven::write_sav()将这些数据帧的一部分写入到SPSS文件中,但是我遇到了一些数据争论的问题,这就是对数据的干扰。

问题是,SPSS只允许小于120个字符的可变级别。我的变量级别超过了这个限制,这不允许我使用数据帧编写*.sav文件。

因此,我的想法是将每个dataframe列的每个出现级别截断为<= 120个字符,以确保写入过程不会中断,但我不知道如何操作所有列中的所有级别。

我像这样提取级别:

代码语言:javascript
复制
df %>%
    lapply(levels)

但是之后我就不知道如何处理我得到的列表了,特别是因为这个列表中的大多数元素根本没有任何级别(并且使用lapply赋值为NULL )。

我尝试过这样的方法,但之后haven::write_sav()只将"1“而不是每个变量的实际值写入到SPSS电子表格中:

代码语言:javascript
复制
df <- df %>%
          as.matrix()    %>%
          str_trunc(120) %>%
          as.data.frame()

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

我正在寻找这个问题的整齐解决方案,如果可能的话,任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2019-03-12 22:01:01

我们可以在所有列上应用strtrim (base R) (mutate_all)

代码语言:javascript
复制
library(dplyr)
n <- 120
df %>%
   mutate_all(strtrim, width = n)

在OP的原始代码中,as.data.frame将其转换为data.frame,缺省情况下(stringsAsFactors = TRUE)列是factor,除非使用stringsAsFactors = FALSE指定

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55123042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档