提问人:andy 提问时间:11/14/2023 更新时间:11/14/2023 访问量:67
将多项选择响应转换为单热编码
Converting Multiple choice response to one-hot encoding
问:
我有一个 excel 文件,其中包含包含具有多项选择答案的问题的数据。例如,这个问题有 15 个多项选择选项。我想将这种格式的响应转置为采用 one-hot 编码格式。最终,这将使我更容易进行分析。
问题
远程学习的最佳方面?
- 灵活性
- 可及性
- 时间范围
- 模块质量
- 学习资源
- 课前课程
- 住宅质量
- 住宅数量
- 教程质量
- 教程频率
- 指导支持的质量
- 指导支持的频率
- 该计划的包容性方法使所有性别的学习者受益
- 该计划对个人自信和自我提升的影响
- 该计划对提高教学技能的影响
如何在 R 中执行此操作?我不擅长 excel,但第二个 excel 替代方案会有所帮助。
答:
0赞
hanne
11/14/2023
#1
我会使用以下软件包:fastDummies
# # If necessary, install the package
# install.packages("fastDummies")
# Load the library
library(fastDummies)
# Using your 'Best Aspect to Distance learning' dataset
data <- name_of_your_dataset
# Create dummy variables
data <- dummy_cols(data,
select_columns = "Best Aspect to Distance learning")
# Verify
print(data)
评论
0赞
Mark
11/14/2023
这如何回答对不起的问题?
0赞
Mark
11/15/2023
我问是因为我尝试在示例中运行它,但它没有产生所需的输出
2赞
Mark
11/14/2023
#2
根据我在网上看到的热门编码表,您似乎想要这样的东西:
library(tidyverse)
df <- read_csv("/Users/mark/Downloads/Best Aspect to Distance learning - Sheet1.csv")
df |>
mutate(row = row_number(),
`Best Aspect to Distance learning` = str_split(`Best Aspect to Distance learning`, ", |,| and ")) |>
unnest(`Best Aspect to Distance learning`) |>
pivot_wider(names_from = `Best Aspect to Distance learning`, values_from = `Best Aspect to Distance learning`, values_fn = ~ 1, values_fill = 0)
输出:
# A tibble: 13 × 19
row `1` `2` `3` `4` `5` `7` `8` `9` others `10` `15`
<int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 1 1 1 1 1 1 1 1 1 0 0
2 2 1 1 1 1 1 1 1 1 0 0 0
3 3 1 1 1 1 1 1 1 0 0 0 0
4 4 1 1 1 1 1 0 0 1 0 1 1
5 5 1 1 1 0 1 0 0 1 0 0 0
6 6 1 1 1 1 1 0 1 0 0 0 0
7 7 1 1 0 0 0 1 1 0 0 0 0
8 8 1 1 1 0 1 0 0 0 0 0 1
9 9 1 1 1 1 1 1 1 0 0 0 0
10 10 0 1 0 1 0 1 0 0 0 0 0
11 11 0 1 1 0 0 0 1 0 0 0 0
12 12 1 1 0 1 1 1 0 0 0 0 0
13 13 0 1 1 1 0 1 0 1 0 0 0
# ℹ 7 more variables: `11` <dbl>, `35` <dbl>, `13` <dbl>, `16` <dbl>,
# `6` <dbl>, `12` <dbl>, `14` <dbl>
您可能希望包含从最小值到最大值的所有数字的列,甚至包括每个值都为零的列,但您没有提到这一点。如果这是你想要的,请告诉我。期望的输出会很棒。
评论
0赞
andy
11/15/2023
嗨,马克,这是所需的输出。但是,我不明白,你说的是什么意思......“您可能希望包含从最小到最大的所有数字的列”......如果建议的列是 18,根据多项选择选项的计数,这是否意味着 min=0 和 max=18?如果是这样,您如何编辑代码?谢谢
0赞
Mark
11/15/2023
我想说的是,假设第一行(也是唯一一行)是“1、2、5”。您是否希望它包含所有数字列,即 1 2 3 4 5,还是仅包含出现在行中的列
0赞
andy
11/15/2023
仅显示在行中的那些。此代码是否以这种方式工作,或者您是否必须进行编辑。这是我将使用的首选方法。
1赞
Mark
11/15/2023
是的,这就是我已经做过@andy
0赞
andy
11/15/2023
对不起,马克,我想包括所有的数字。
下一个:根据名称水平粘贴数值
评论