r - 如何整理列是虚拟变量而单元格值是观察名称的数据集?
问题描述
我有一个非常混乱的数据集,其中每一列(正确)对应于感兴趣的变量。
数据集本质上计算了个人。例如,Var1 应该是 Var1 为真的人员列表。想象一下变量是冰淇淋的味道。Var1 是巧克力冰淇淋。记录数据的方式是这样的,而不是指示(1/0 或 T/F)某人是否喜欢巧克力冰淇淋,数据集只包含喜欢巧克力冰淇淋的人的名字。
这种列表样式的数据集使得分析数据变得困难,因为行不对应于单个观察值。现在,每一列只包含一个名称列表。例如,Var1 可能是喜欢巧克力冰淇淋的人的名字列表(不是 R 意义上的,而是现实世界意义上的)。
为了使该数据集易于分析,我想使用这些信息使数据集中的每一行对应于一个观察值,并且每个单元格值对应于给定变量的观察值是否为 T/F。
现在,数据集看起来像这样:
Var1 Var2 Var3
Name1 Name1 Name2
Name2 Name3
Name4 Name4
或就冰淇淋口味而言:
Chocolate Strawberry Raspberry
Barbara Barbara Shanshan
Shanshan Maria
Louis Louis
所以芭芭拉喜欢巧克力和草莓冰淇淋,但是数据集很混乱,珊珊的名字和芭芭拉的名字在同一行。不应该是这样的。第一行应该代表 Barbara 的值,单元格值应该是 1/0 或 T/F,表示 Barbara 是否喜欢特定口味的冰淇淋。
简而言之,我希望它看起来如下
Var1 Var2 Var3
1 1 0
1 0 1
0 1 0
1 1 0
解决方案
library(dplyr)
library(tidyr)
df %>%
pivot_longer(everything()) %>%
filter(!is.na(value)) %>%
pivot_wider(id_cols=value, values_from=name) %>%
mutate_at(.vars=vars(-value),
.funs=~ifelse(is.na(.), 0, 1))
# A tibble: 4 x 4
value Var1 Var2 Var3
<fct> <dbl> <dbl> <dbl>
1 Name1 1 1 0
2 Name2 1 0 1
3 Name3 0 1 0
4 Name4 1 1 0
数据
library(tibble)
df <- tribble(~Var1, ~Var2, ~Var3,
'Name1', 'Name1', 'Name2',
'Name2', 'Name3', NA,
'Name4', 'Name4', NA)
推荐阅读
- javascript - 如何使用 ASP.NET WebForms 中的 JavaScript 从 FormView 中的 DropDownList 将文本放入 TextBox?
- regex - 正则表达式匹配字符串之后或行尾之前
- javascript - 循环网格加载到使用 this.getStore() 的 Item。加载 ()
- typescript - 如何使用打字稿在firebase函数中迭代实时数据库
- javascript - 使用 JavaScript 使用随机盐散列密码并从 C# 验证
- vapor - 蒸汽 3,流利模型不会在 DB 中创建原始模型
- beautifulsoup - 如何使用mechanicalsoup 或任何其他python 库填写此表格?
- php - 如何将此数组转换为可用变量?得到“通知:未定义”
- javascript - 如何等待 Firestore 数据库请求完成?
- oracle - 在 Oracle 函数中正确使用 sum 和 case 作为循环