0

我有一个包含 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=""))

我现在将u1OV值替换驻留在其中的所有唯一项列,并将其创建为转换表。之后替换data6$items.

非常感谢你的帮助。

4

2 回答 2

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

如果您只想更改Twith OV,您也可以这样做:

data6$items <- gsub("T", "OV", data6$items)
于 2015-08-21T05:35:57.820 回答
1

看起来您的“项目”可以被视为需要新标签的因素变量。如果是这样,您可以避免转换表并重新编码源数据框中的“项目”:

data6$items = factor(data6$items, labels=paste0("OV", 1:length(unique(data6$items))))
于 2015-08-21T06:20:33.987 回答