通过转换重新编码数据帧 table
Recoding dataframe by transformation table
我有一个包含 3 列的数据框。其中一列(项目)包含可能重复的长字符串(有些包含特殊字符,例如分号;为简单起见,此处将其写为 Tx)。我想找到特定列的所有唯一值。按照以下格式为每个唯一值创建昵称:OV1、OV2、... OVn。我想保留这个 table 并称它为 'transformation table'。
在下一步中,我想转到源 table 并使用转换 table.
中的值重新编码每个值
这是来源的示例 table:
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
结果 table 将是:
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
转换 table 将是:
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=""))
我现在要用 OV
值替换 u1
中的所有唯一项目列,并将其创建为转换 table。之后替换 data6$items
.
中的所有值
非常感谢您的帮助。
您可以通过以下方式创建转换 table:
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
您现在可以将源 table 中的相关项目替换为:
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)
看起来您的 "item" 可以被视为需要新标签的因子变量。如果是这样,您可以避免转换 table 并在源数据框中重新编码 "item":
data6$items = factor(data6$items, labels=paste0("OV", 1:length(unique(data6$items))))
我有一个包含 3 列的数据框。其中一列(项目)包含可能重复的长字符串(有些包含特殊字符,例如分号;为简单起见,此处将其写为 Tx)。我想找到特定列的所有唯一值。按照以下格式为每个唯一值创建昵称:OV1、OV2、... OVn。我想保留这个 table 并称它为 'transformation table'。 在下一步中,我想转到源 table 并使用转换 table.
中的值重新编码每个值这是来源的示例 table:
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
结果 table 将是:
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
转换 table 将是:
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=""))
我现在要用 OV
值替换 u1
中的所有唯一项目列,并将其创建为转换 table。之后替换 data6$items
.
非常感谢您的帮助。
您可以通过以下方式创建转换 table:
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
您现在可以将源 table 中的相关项目替换为:
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)
看起来您的 "item" 可以被视为需要新标签的因子变量。如果是这样,您可以避免转换 table 并在源数据框中重新编码 "item":
data6$items = factor(data6$items, labels=paste0("OV", 1:length(unique(data6$items))))