通过转换表重新编码数据帧

时间:2015-08-21 04:46:07

标签: r dataframe transformation recode

我有一个包含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))); 中的所有值。

非常感谢你的帮助。

2 个答案:

答案 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))))