如何通过for循环迭代为向量中每个唯一元素生成二进制向量?
解决方案
首先明确你的需求:基于原始名称向量,为每个唯一名称生成对应位置为1、其余为0的二进制向量。你的现有代码存在变量逻辑混淆、assign用法错误以及向量初始化不当的问题,以下是修正后的实现:
1. 嵌套for循环实现(符合你的需求)
先定义原始向量和唯一名称集合:
# 原始名称向量 Surgeons <- c("apple", "apple", "apple", "pear", "grape", "apple") # 获取所有唯一名称 unique_names <- unique(Surgeons)
然后用嵌套循环生成目标向量:
# 外层循环遍历每个唯一名称 for (name in unique_names) { # 初始化空向量存储二进制结果 binary_vec <- c() # 内层循环遍历原始向量的每个元素 for (item in Surgeons) { # 判断当前元素是否匹配,添加1或0到向量 binary_vec <- append(binary_vec, ifelse(item == name, 1, 0)) } # 将生成的二进制向量赋值为对应名称的全局变量 assign(name, binary_vec) }
执行后验证结果:
> apple [1] 1 1 1 0 0 1 > pear [1] 0 0 0 1 0 0 > grape [1] 0 0 0 0 1 0
2. 更高效的R风格实现(推荐)
R中不推荐过度使用嵌套循环,用sapply可以更简洁地完成需求,同时支持批量生成:
# 生成以唯一名称为键的二进制向量列表 binary_list <- sapply(unique_names, function(x) as.integer(Surgeons == x)) # 将列表中的向量转为全局变量(可选) list2env(binary_list, .GlobalEnv)
内容的提问来源于stack exchange,提问作者Max Nurko
相关产品推荐
相关产品推荐

