我有一个包含3列的数据框。其中一个列(项)包括长字符串(一些包括特殊字符,如分号;为简单起见,它在这里写为Tx)可能会重复。我想找到特定列的所有唯一值。对于使用以下格式创建昵称的每个唯一值:OV1,OV2,... OVn。我想保留此表并将其称为转换表'。 在下一步中,我想转到源表并使用转换表中的值重新编码每个值。
以下是源表的示例:
items sequenceID eventID SIZE
1: T1 41595370 1 1
2: T2 41595371 1 1
3: T3 41595282 1 1
4: T3 41595282 2 1
5: T4 41595373 1 1
6: T5 41595368 1 1
7: T1 41595379 1 1
结果表将是:
items sequenceID eventID SIZE
1: OV1 41595370 1 1
2: OV2 41595371 1 1
3: OV3 41595282 1 1
4: OV3 41595282 2 1
5: OV4 41595373 1 1
6: OV5 41595368 1 1
7: OV1 41595379 1 1
转换表将是:
1: T1 OV1
2: T2 OV2
3: T3 OV3
4: T4 OV4
5: T5 OV5
源数据位于data6
(数据帧)中。
我使用了以下命令:
u1 <- unique(data6$items)
u1 <- data.frame(u1)
ov <- c(paste("ov",1:nrow(u1),sep=""))
我现在要将u1
中包含OV
值的所有唯一项目列替换为data6$items
值,并将其创建为转换表。然后替换$original_date = "2015-08-07 02:00:00";
echo $next_date = date('Y-m-d H:i:s', strtotime("monday this Week 02:00:00 +1 week", strtotime($original_date)));
中的所有值。
非常感谢你的帮助。
答案 0 :(得分:1)
您可以使用以下命令创建转换表:
u1 <- as.data.frame(unique(data6$items))
names(u1) <- "items"
u1$newitem <- paste0("OV", substr(u1$items,2,4))
这给出了:
> u1
items newitem
1 T1 OV1
2 T2 OV2
3 T3 OV3
4 T4 OV4
5 T5 OV5
您现在可以用以下内容替换源表中的相关项目:
data6$items = u1$newitem[match(data6$items,u1$items)]
这给出了:
> data6
items sequenceID eventID SIZE
1 OV1 41595370 1 1
2 OV2 41595371 1 1
3 OV3 41595282 1 1
4 OV3 41595282 2 1
5 OV4 41595373 1 1
6 OV5 41595368 1 1
7 OV1 41595379 1 1
如果您只想用T
更改OV
,您也可以这样做:
data6$items <- gsub("T", "OV", data6$items)
答案 1 :(得分:1)
看起来你的“项目”可以看作需要新标签的因子变量。如果是这样,您可以避免转换表并重新编码源数据框中的“项目”:
data6$items = factor(data6$items, labels=paste0("OV", 1:length(unique(data6$items))))