如何在R中缩短SPSS文件的超长变量标签?

f87krz0w  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(132)

上下文:

  • 我有一个大型调查的数据(从Qualtrics调查,导出为SPSS,.sav文件格式)。
  • 总共有648个变量,因为大多数问题都是“勾选所有适用的”或排名响应,其中每个选项都显示为二进制变量。
  • 200个变量(用于等级回答问题)具有非常长和繁琐的变量标签。每个标签的前150个左右的单词是相同的,包含问题的解释性文本,然后标签的最后2-5个单词是不同的,包含该变量的唯一信息。
  • 目前使用haven和labeled包进行阅读.sav文件并创建了数据字典。
    **问题:**我希望能够从所有这200个变量标签中删除相同的文本,并在最后只留下唯一的单词。
    我在哪里

我能够在这里找到所有200个感兴趣的变量名,因为它们都包含“RANK”,如下所示:

colnames(
  look_for_and_select(data,
                      "RANK",labels=FALSE,
                      values=FALSE,
                      ignore.case=FALSE),
  )

字符串
我在搜索中找到的所有内容都是替换或添加新变量标签的函数,但我需要能够保留标签中已有的唯一文本。我想也许有一种方法可以使用gsub().但希望得到任何想法或帮助!

**示例:**这里是变量标签中的文本,最后我想保留的单词在末尾加粗。每个变量标签在开头都有这个巨大的文本块,在结尾有不同的2-5个单词:

“1.5哪些行动是推进本设想方案目标的最大机会?选择最多3个先前选择的操作,将它们拖到框中,并根据它们对这个目标的重要性进行排序(1=最重要).情景上下文&假设你是一个负责规划未来20年你所在地区一条假想街道上所有行道树管理的经理。街道有人行道和低层开发,建筑物约为1-3层高。在这个几乎完美的世界中,您可以完全控制人行道附近的树木。在这些场景中,假设以下情况为真:您选择的每个操作都与不执行任何操作进行比较操作将根据行业标准执行”树木不会因破坏、新建筑、极端 Storm 或害虫入侵等事件而被移除。新种植的树木将通过建立和生存所需的方式进行浇水。城市形态不会改变(街道、行人路、建筑物将保持不变,并进行合理的维护)种植的物种将适应由于气候变化而在20年内预计的耐寒区的任何变化-等级-实现该情景目标的机会(等级3)-植物本地物种

yvgpqqbh

yvgpqqbh1#

library(tidyverse)
library(labelled)

字符串
创建一个data.frame,其变量标签与您的描述相似。

same <-
  '1.5 Which actions present the greatest opportunity to advance this scenario\'s goal? Select up to 3 of your previously selected actions, drag them into the box, and rank them in order of their importance for this goal (1=most important). Scenario Context & Assumptions Imagine yourself as a manager responsible for planning all street tree management on a hypothetical street in your region for the next 20 years. The street has a sidewalk and low-rise development, with buildings that are approximately 1-3 stories tall. In this mostly perfect world, you have full control over the trees adjacent to the sidewalk. Within these scenarios, assume the following will be true: Each action you select is in comparison to not doing the actions at all Actions will be performed according to industry standard" Trees will not be removed by events such as vandalism, new construction, extreme storms, or pest invasions Newly planted trees will be watered through establishment and as needed for survival Urban form will not change (street, pavement, buildings will remain the same with reasonable maintenance) Species planted will be adapted for any change in hardiness zone projected in 20 years due to climate change - Ranks - Opportunities to achieve this scenario\'s goal (rank 3) - '

var_labels <- paste(same, "plant native species", 1:10)

var_names <- paste("var", 1:10, sep = "_")

df <-
  var_names |>
  lapply(\(x) tibble(a = 1:10) |> set_names(x)) |>
  bind_cols() |>
  set_variable_labels(.labels = var_labels)


我们可以使用labelled::get_variable_labels()获取所有变量标签,然后使用正则表达式(RegEx)使用stringr::str_remove()修改它们,正如user 20650在其评论中所建议的那样。正则表达式.*-指示str_remove()删除所有字符,直到它遇到最后一个破折号/连字符。如果所有变量标签都用破折号分隔最后一位,则这应该适用于所有标签。

short_var_labels <-
  df |>
  get_variable_labels() |>
  str_remove(".*-") |>
  trimws()

short_var_labels
#>  [1] "plant native species 1"  "plant native species 2" 
#>  [3] "plant native species 3"  "plant native species 4" 
#>  [5] "plant native species 5"  "plant native species 6" 
#>  [7] "plant native species 7"  "plant native species 8" 
#>  [9] "plant native species 9"  "plant native species 10"


现在我们可以将短变量标签应用于data.frame

df <-
  df |>
  set_variable_labels(.labels = short_var_labels)

get_variable_labels(df)
#> $var_1
#> [1] "plant native species 1"
#> 
#> $var_2
#> [1] "plant native species 2"
#> 
#> $var_3
#> [1] "plant native species 3"
#> 
#> $var_4
#> [1] "plant native species 4"
#> 
#> $var_5
#> [1] "plant native species 5"
#> 
#> $var_6
#> [1] "plant native species 6"
#> 
#> $var_7
#> [1] "plant native species 7"
#> 
#> $var_8
#> [1] "plant native species 8"
#> 
#> $var_9
#> [1] "plant native species 9"
#> 
#> $var_10
#> [1] "plant native species 10"

相关问题