我有一个大约有50个条目和2列的数据框-简短问题名称的长列表和相应的长问题名称:
variable_short | variable_long |
---|---|
猫 | 你有猫吗? |
关口 | 蓝色是您最喜欢的颜色吗? |
压力 | 你工作压力大吗? |
这是调查中使用的问题的摘要。调查响应位于单独的数据框中,其中包含列名,这些列名是variable_short中的变量-
人员编号 | 猫 | 关口 | 压力 |
---|---|---|---|
2567 | 1个 | 0 | 1个 |
我正在尝试创建一个新的数据框,其中仅包含我从50个问题中需要回答的10个问题,以及相应的调查答复以及人员ID。我正在努力将调查数据中的简短问题格式替换为变量数据框中相应的较长问题格式。理想情况是这样的:
人员编号 | 你有猫吗? | 你工作压力大吗? |
---|---|---|
2567 | 1个 | 1个 |
我开始进行子集处理,以将变量转换为所需的变量:
new <- subset(variables, variable_short %in% c('cat', 'stress'), select = c('variable_short', 'variable_long'))
它对变量进行重新排序,因此我无法按顺序进行操作,并且我认为这不是万一变量顺序发生变化的最有效方法。我可以重命名列标题,但对匹配尤其是将匹配变量匹配到标题还不熟悉。
我现在完全被困住了,因此我们将不胜感激。太感谢了。
我们可以使用match
以下方式重命名列名称:
names(df2)[-1] <- df1$variable_long[match(names(df2[-1]), df1$variable_short)]
df2
# person.id Do you have a cat? Is blue your favourite colour? Are you stressed at work?
#1 2567 1 0 1
如果您只想保留其中包含1的值,请以长格式和重新整形数据filter
。
library(dplyr)
library(tidyr)
df2 %>%
pivot_longer(cols = -person.id) %>%
filter(value == 1)
# person.id name value
# <int> <chr> <int>
#1 2567 Do you have a cat? 1
#2 2567 Are you stressed at work? 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句