我有一个变量,我试图削减一个更易于管理的值。我将变量的唯一值列表导出到csv文件中,并在相邻列中为它们分配了更多通用名称。如,
EVTYPE new_category
- x1 x
- x2 x
- x3 x
- x4 x
- y1 y
- y2 y
- y3 y
然后我将其上传回R,并尝试创建一个新变量,其中如果old_val = x1,new_var2 = x,依此类推。 old_val变量中有大约1,000个唯一值,因此嵌套ifelse语句或类似的东西确实是不可能的。以下是我正在处理的一些代码,但还无法开始工作,其中dataset =整个数据集,new_data =具有唯一值的数据集:(抱歉格式不佳,不知道如何正确执行上述列表)
ND_row_count <- NROW(new_data)
for (i in 1:ND_row_count){
if (dataset$EVTYPE==new_data$EVTYPE2[i]) {
dataset$new_category <- new_data$new_category[i]
}
}
答案 0 :(得分:3)
您可以使用向量化函数match
。
以下内容应返回(并指定给dataset$new_category
)与原始值的长向量对应的新类别向量。
dataset$new_category <- new_data$new_category[match(dataset$EVTYPE, new_data$EVTYPE2)]
在上方,match
为dataset$EVTYPE
的每个元素找到匹配元素new_data$EVTYPE2
的位置。然后,我们将索引向量用于子集new_data$new_category
。