【发布时间】:2021-02-14 22:36:41
【问题描述】:
我有一个包含大约 50 个条目和 2 列的数据框 - 短问题名称和相应长问题名称的长列表:
| variable_short | variable_long |
|---|---|
| cat | Do you have a cat? |
| col | Is blue your favourite colour? |
| stress | Are you stressed at work? |
这是调查中使用的问题的摘要。调查回复位于一个单独的数据框中,其中包含列名,这些列名是 variable_short 中的变量 -
| person.id | cat | col | stress |
|---|---|---|---|
| 2567 | 1 | 0 | 1 |
我正在尝试创建一个新数据框,其中仅包含 50 个我需要的 10 个问题以及相应的调查回复以及人员 ID。我正在努力用变量数据框中的相应长问题格式替换调查数据中的短问题格式。理想情况下是这样的:
| person.id | Do you have a cat? | Are you stressed at work? |
|---|---|---|
| 2567 | 1 | 1 |
我开始对变量进行子集化以得到我需要的变量:
new <- subset(variables, variable_short %in% c('cat', 'stress'), select = c('variable_short', 'variable_long'))
它对变量重新排序,所以我不能按顺序进行,我认为这不是最有效的方法,以防变量顺序发生变化。我可以重命名列标题,但我还不熟悉匹配特别是匹配对应的变量到标题。
我现在完全陷入困境,因此我们将不胜感激。非常感谢。
【问题讨论】:
-
我建议使用
tidyr::pivot_longer将您的调查数据转换为长而“整洁”的格式,然后使用调查短名称作为键对您的查找表进行left_join,然后再次扩大范围。 -
您是要为每个 person.id 创建一个单独的表,其中只包含与其相关的标题,还是要创建一个包含所有 person.id 但许多 NA' 列的大表,这些列与不相关的问题询问那个特定的 person.id?
-
@Jon Spring 谢谢你的建议,我会试试的。我实际上是在尝试创建第三个表,它只是更改第二个表以保留所有数据,但将除“person.id”之外的标题替换为第一个表中 variable.long 中的选定变量。
标签: r dataframe dplyr header tidyverse