我正在处理Qualtrics的调查回复,并在R.
15个问题是多项选择题,其中一个人可以选择多个选项(例如,选择选项1,3和4的人的输出看起来像“1,3,4”)。我有4个问题(而不是15个):社会、情感、认知和家庭。如果一个人在社交中选择1、2和4,输出将是“1、2、4”,如果他只选择“2”作为家庭,输出将是“2”。参见下面的示例数据库:
| 性别|社会的|情感的|认知的|家庭|
| --------------|--------------|--------------|--------------|--------------|
| 1| 1|一、二、四|三|二|
| 二|二|三四|四个|一、二、四|
| 1|三四|一、三|一二三|1|
社交/情感/认知/家庭列中的每个数字代表一个类别。如果被访者勾选“1”,我对该类别的回答是肯定的,如果他没有勾选,我对该类别的回答是否定的。因此,这些列中的每个数字实际上是一个二进制响应(正/负)。
因此,为了能够分析数据(卡方),我希望数据框看起来像这样:
| 性别|社交1|社交2|社交3|社交4|
| --------------|--------------|--------------|--------------|--------------|
| 1|是的|不|是的|是的|
| 二|是的|是的|不|不|
| 1|不|不|是的|不|
有没有一个函数或一系列函数可以让我这样做?
请注意,我有15个问题(即15列),所以我更希望我能在整个 Dataframe 上做,而不仅仅是一个问题。
我试着这样做(对于每个列):
data<- read.csv("data.csv")
social.data<- data.frame(Sex=c(data$gender),
social=c(data$social),
str_split_fixed(data$social, ',', 3))
R给我的数字是分开列的。。从那里,我不知道该怎么做才能得到我上面描述的所需的 Dataframe ?
3条答案
按热度按时间u0sqgete1#
首先,使用
str_split()
将逗号分隔的字符串拆分为一个数字列表。然后,您可以Map已知的响应值来创建二进制变量。旧答案:
然后,您可以逐个对列表列使用
unnest()
,并使用pivot_wider()
从tidyr
将它们旋转得更宽。你也可以将
unnest()
和pivot_wider()
步骤转换成一个函数,然后只对数据调用该函数:创建于2023-05-10带有reprex v2.0.2
bxgwgixi2#
也许是个开始。您可以使用
dplyr::across
在多个列或所有列之间移动。这将需要一些清理后,但应该让你开始。首先是一些数据:
不确定是否有一种方法来编程,所以它认识到逗号的数量,但这增加了空白的地方有少于最大,你需要硬编码的最大!
要重命名可能会检查这个问题:Splitting multiple string columns and rename the new columns adequately- R
下面是链接中针对这个问题的代码:
kyvafyod3#
使用 data.table,将数据重新整形为长格式- melt,然后在逗号上 split,然后将其重新整形为宽格式- dcast: