r - R:如何从向量有效地创建类别?
问题描述
假设我在 R 中有一个0
s 和1
s 的向量。向量的长度是 6。所以有2^6 = 64
组合。我的问题是除了编写 64ifelse
条语句来返回 64 个不同的值(类别)之外,有没有更有效的方法来做到这一点?
case_classification <- function(df){
aa <- df["aa"]
bb <- df["bb"]
cc <- df["cc"]
dd <- df["dd"]
ee <- df["ee"]
ff <- df["ff"]
if(aa == 1 && bb== 0 && cc == 0 && dd == 0 && ee == 0 && ff ==0){
return 1;
} else if(aa == 0 && bb== 1 && cc == 0 && dd == 0 && ee == 0 && ff ==0){
return 2;
}else if(...){
} ...
}
解决方案
我们可以做的
d1 <- do.call(expand.grid, lapply(df[strrep(letters[1:6], 2)], unique))
d1$value <- seq_len(nrow(d1))
merge(df, d1, all.x = TRUE)
另一种选择是interaction
as.integer(do.call(interaction, df[strrep(letters[1:6], 2)]))
推荐阅读
- amazon-web-services - AWS Quicksight - 编辑/调整自动生成的查询
- javascript - change()替代方案中的回调函数?
- java - 如何在一个类中创建对象并将它们保存在另一个类中的数组中?
- javascript - 拿来。处理来自服务器的 500 个响应
- c++ - 如何检索指向在单独线程上运行的函数的移动指针?
- loops - 在 netlogo 中循环以创建多个属性
- css - CSS 属性“调整大小”不适用于“粘性”
- reactjs - 如何更新道具依赖状态
- java - onItemSelected Listner 不会被数据库中的长字符串数组触发
- javascript - Javascript页内滚动偏移