【问题标题】:How to create a dummy variable based on other columns values in R?如何根据 R 中的其他列值创建虚拟变量?
【发布时间】:2021-05-28 01:13:28
【问题描述】:
我正在清理从重复项中抓取的数据集。我想创建一个虚拟变量,指示我是否有两个或多个观察值在所有条件下或除一个之外的所有条件下都相同。
这是我的数据集的一个示例:
| Postcode |
nrooms |
price |
sqm |
| 76 |
1 |
259 |
30 |
| 75 |
5 |
380 |
120 |
| 75 |
5 |
400 |
120 |
| 75 |
2 |
450 |
80 |
| 76 |
1 |
259 |
30 |
这是我想要的假人:
| Postcode |
nrooms |
price |
sqm |
dummy |
| 76 |
1 |
259 |
30 |
1 |
| 75 |
5 |
380 |
120 |
1 |
| 75 |
5 |
400 |
120 |
1 |
| 75 |
2 |
450 |
80 |
0 |
| 76 |
1 |
259 |
30 |
1 |
如果第一行和最后一行在所有特征上具有相同的值,则第二行和第三行在除一个(价格)之外的所有特征中具有相同的值。
有人可以帮我解决这个问题吗?
谢谢!
【问题讨论】:
标签:
r
if-statement
dummy-variable
【解决方案1】:
使用两个apply 调用和duplicated 函数(请参阅this previous SO answer)。我们遍历大小为 ncol - 1 的列的所有组合,使用duplicated 查找重复项。由于您要查找所有列或除一个之外的所有列的重复项,因此我们只需要查看大小 ncol - 1 的组合。然后我们循环该操作的结果以找出是否有任何行具有任何重复项列组合。
apply(
apply(combn(ncol(dat), ncol(dat) - 1),
2,
FUN = function(cc)
duplicated(dat[,cc]) | duplicated(dat[,cc], fromLast = TRUE)),
1,
max)
# [1] 1 1 1 0 1
与往常一样,在循环中使用循环,逐步完成其中的每个部分会很有帮助。检查combn(ncol(dat), ncol(dat) - 1) 的输出,然后检查内部apply