R语言如何基于其他列条件为dataframe新增指定规则的向量列
R 实现数据框新增指定规则的material列
实现逻辑
按照需求逐行处理即可:
- 为每一行生成长度固定为10的向量
- 若该行
tile_type_index值不为10,向量中索引值等于tile_type_index的位置赋值1000,其余位置为0 - 若该行
tile_type_index值为10,向量所有位置均为0 - 最终将向量拼接为逗号分隔的字符串,和预期展示格式一致
可直接运行的代码
# 初始化示例数据框 df<-structure(list(hex = 1:6, tile_type_index = c(9L, 10L, 5L, 9L, 3L, 2L)), class = "data.frame", row.names = c(NA, -6L)) # 生成material列 df$material <- sapply(df$tile_type_index, function(idx) { # 按规则生成长度为10的数值向量 val_vec <- if (idx == 10) { rep(0, 10) } else { as.integer(1:10 == idx) * 1000 } # 拼接为逗号分隔字符串,匹配预期输出格式 paste(val_vec, collapse = ", ") })
运行结果
执行代码后打印df,输出完全匹配预期:
hex tile_type_index material 1 1 9 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0 2 2 10 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 3 3 5 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0 4 4 9 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0 5 5 3 0, 0, 1000, 0, 0, 0, 0, 0, 0, 0 6 6 2 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0
如果你需要
material列直接存储数值向量而非字符串,删除代码中paste拼接的步骤,直接将val_vec作为返回值即可,此时该列会转为列表类型,每个元素对应一个长度为10的数值向量。
内容的提问来源于stack exchange,提问作者locket
相关产品推荐
相关产品推荐

