问题标签 [r-haven]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
158 浏览

r - 选择具有自定义类的列

这个问题非常简单。我正在使用这个haven包,它创建了一个自定义类haven_labelled,在将数据从 Stata 导入 R 时调用(它的好处是在 R 中显示标签)。我想选择具有此自定义类(或任何其他自定义类)的列。

使用标准类,可以使用is.numericis.factor

例如:df <- Filter(is.numeric, df)

可以在此处找到许多其他方法。

我试过用class=="haven_labelled".

例如:df <- Filter(class=="haven_labelled", df),但这不起作用。它给出了错误:

有任何想法吗?

编辑:

在尝试 H 1 的解决方案时,我发现了两件对于使用 Haven 包的其他人来说可能很重要的事情。

  1. 类名实际上必须是“labelled”而不是“haven_labelled”。
  2. 选择不起作用,因为 Have 为每个变量创建了双类(并且所有这些都是labelled另一个类的补充)。因此,基于标签的选择只返回完整的数据集。
0 投票
0 回答
587 浏览

r - 使用“as_factor”转换“haven_labelled”后标签丢失

当将haven_labelled变量转换为因子变量时,我(似乎)失去了潜在的“标签”(使用tidyverse我认为的术语......)。

的属性x_tib$value如我所料

但是,在我将其转换为因子变量后(如haven文档中所建议的那样),我似乎失去了原来的“标签”(1、5、10、20 变为 1、2、3、4)。

我可以保留底层的“标签”吗?

注意 - 我知道我可以在as_factor(例如as_factor(x_tib$value, "value")as_factor(x_tib$value, "both"))的“级别”选项中对它们进行编码。

0 投票
0 回答
163 浏览

r - 将字符列转换为保留列标签的因子

我有一个从 XLSX 文件中读取的数据框。每个列名看起来像这样: CODE___DESCRIPTION 例如A1___Some funky column here。将代码用作列名更容易,但我想在需要时使用描述,因此它必须存储在数据框中。这就是我稍后使用sjlabelled包的原因。

为自己制作一些随机数据并将其保存为some_data.xlsx

我创建了简单的函数来按照我想要的方式准备我的数据。

首先我从 XLSX 文件中读取数据。然后我给它贴上标签。

现在我的每个数据框的列都是具有两个属性的字符向量(实际上它是一个结构):

  • 标签是描述部分
  • 名称是原始数据框列名称(CODE___DESCRIPTION 样式),不要误认为名称(数据)的输出,这将是代码部分

假设我想将第一列和第三列更改为因子。

为此,我尝试了两件事:

这会将所有这两个列的值更改为 NA_integer_。

这会将字符向量更改为预期的因子,但它会删除我需要保留的两个列属性(标签和名称)。

我还尝试了sjlabelledlabeledHave包中的很多功能。没有按我的预期工作。最后,我找到了一个解决方案,但它并不完美,我很想找到一种更简单的方法来做到这一点。

解决方案是失去这些属性,然后重新获得(实际上是“复制”)它们。

copy_labels是来自sjlabelled包的函数,当标签由于例如数据子集而丢失时使用,如本例所示

PS 我很想添加r-sjlabelledr-labelled标签,因为在这个问题中考虑了这些包,但执行此操作所需的声誉低于 1500。

0 投票
1 回答
126 浏览

r - 如果列是不寻常的类型,我如何检查它的类型?

我有一些来自 .sav 文件的 SPSS 数据,并正在尝试在 R 中使用它。许多变量的类型为 Have_labelled。我想使用 mutate_if() 将它们转换为双精度。如何为 mutate_if() 创建一个谓词,以捕获所有类型为 Have_labelled 的列?Have 库中有一个 is.labelled() 函数。

0 投票
0 回答
434 浏览

r - R得到错误“`x`和`labels`必须是同一类型”

我正在使用带有以下软件包的R版本 3.6.1:

我的代码看起来有点像这样:

对于第二个“子集”调用,我得到了众所周知的错误“错误:x并且labels必须是同一类型”。我已经在几个线程中读到它可能与包的顺序有关,以及与其他包(Hmisc 和其他包)冲突的 Have 包的标签功能/ S3 方法。但是,我无法找到一个好的解决方法,甚至无法解决该问题。另外......我不能再运行几个基本的分析,比如 lm 甚至 rcorr 并且不断收到这个错误。

如果有人可以帮助我提示如何解决该问题,我将非常高兴。提前致谢。

0 投票
1 回答
200 浏览

r - 为什么have::write_dta() 会膨胀文件大小并且可以更改吗?

有时我需要将 SPSS 文件转换为 DTA 文件。通常我使用Stat/Transfer,但我想也许我可以使用 R 来省钱。

但是,当我使用 Haven 包传输文件时,生成的文件大小比我使用 Stat/Transfer 时要大得多

例如,这是我在 Internet 上找到的 .sav 文件。它是 85kb。

使用 Stat/Transfer 对其进行转换以生成更小的 47kb .dta 文件。

但是,当我运行此代码时,我得到一个 118kb 的 .dta 文件。这是 Stat/Transfer 产品的 2.5 倍。

我能做些什么来使输出haven::write_dta()更小吗?

0 投票
1 回答
470 浏览

r - 如何在 R 中最舒服地加载 .dta(保留标签)?

我使用 .dta 文件并尝试使加载数据尽可能舒适。在我看来,我需要haven和的组合readstata13

  • haven看起来很完美。它提供了最好的“子标签”。但它不提供列选择器功能。我不能read_dta用于大文件(~ 1 GB / 64 GB RAM,Intel Xeon E5)。 问题:有没有办法选择/加载数据子集?在此处输入图像描述

  • read.dta13是我最好的解决方法。它有select.cols. 但我必须attr稍后再保存并合并它们(大约 10 个文件)。

    问题:如何手动添加haven包创建的这些第二个标签?(他们怎么称呼?)

在此处输入图像描述

这是MWE:

0 投票
1 回答
1106 浏览

r - 无法使用 R-package 'haven' 导入以前工作的 SAS 格式文件

大约一年前,我使用 'haven'-package 导入了两个 .sas7bdat 文件及其各自的 .sas7bcat 格式,效果非常好。

然而,由于某种原因,即使所有 SAS 文件包括。从那时起,格式文件一直保持不变。

当我现在尝试运行代码时,R 给了我以下错误:

自第一次工作以来,R 和“避风港”包已重新安装到其最新版本,所以我想这可能是原因,因为所有 SAS 文件和代码都保持不变。

出于这个原因,我尝试重新安装旧版本的“haven”,但不能,因为这显然需要手动安装“Rtools”,这在我的计算机上是不允许的,所以我有点卡在这里。

任何建议将不胜感激,谢谢。

0 投票
2 回答
1374 浏览

r - 如何将多个大型 sas 数据文件读入 R,过滤行并将子集数据集保存为 .rds

我在一个文件夹中有 30 个 sas 文件(dataset1.sas7bdat 到 dataset30.sas7bdat,每个文件大约 10 GB),需要分析这些数据文件中的行子集(字符变量 A 以 10 开头的所有行) . 因此,我需要将每个 sas 文件读入 R,在变量 A 上使用 grep 过滤一个子集,然后将每个过滤后的数据集保存为 .rds 文件。我正在尝试使用 list.files() 的 for 循环和 Haven 包来读取 sas 文件来实现这一点。为了避免内存不足,在子集被过滤并保存为 .rds 之后,我需要在每次迭代中删除导入的数据集。

虽然不优雅也不令人满意,但我可以像这样手动硬编码 30 次,每次复制/粘贴并将后缀增加 1:

虽然以下 for 循环在技术上可以将文件读入内存,但由于大量内存不足,它永远不会完成,因此它不允许我过滤数据:

有没有办法 - 在循环中的每次迭代中 - 过滤数据集,删除未过滤的数据集并将子集保存在 .rds 文件中?我似乎无法想出一种方法将其合并到我使用 assign() 函数的方法中。有没有更好的方法来解决这个问题?

0 投票
0 回答
120 浏览

r - Rmarkdown:在单个代码块工作时编织整个报告时出错

所以我是 R 新手,在项目的某个时间点将 .dta 文件读入 R。但是当我尝试将整个报告编织成 HTML 时,它会在该特定代码行给我一条错误消息。

PS 当我单独运行与其相关的块时,它工作正常。但不知何故没有编织整个报告。

错误消息:'levels<-' ('temp*', value = as.character(levels)) 中的错误:因子级别 [15] 重复调用:... lbl_pillar_info -> as_factor -> as_factor.haven_labelled -> factor