繁体   English   中英

R从一组字符串数据中创建唯一键

[英]R create a unique key from a set of string data

是否有快速算法/函数将字符串转换为R中的整数

我有一个数据帧看起来像

id_1 id_2 id_3 date        value
1     2    3   2012-11-18   50
1     1    4   2012-05-07   100

strtoi(paste(df[,1],df[,3],df[,4],sep='_')给了我一个NA

尝试设置一个唯一的主键我可以用来做一些基本的算术

谢谢

使用digest

library(digest)
temp <- data.frame(x1=c(1:5,1),x2=c(2:6,2),stringsAsFactors=FALSE)
temp <- data.frame(temp, uid = apply(temp, 1, digest),stringsAsFactors=FALSE))

@lokheart指出的digest很棒。

另一种选择是简单地使用factor s。 factor s也是数字。 您可以通过as.numeric强制获取其数值。

 kvpairs <- factor(apply(X, 1, paste, collapse=""))

现在,您在级别(连续的行字符串)和基础数值之间进行配对。

# the numeric key of the first value
> as.numeric(kvpairs)[[1]]
[1] 2

# the value of key==2
> levels(kvpairs)[2]
[1] "1232012-11-18 50"


> kvpairs
[1] 1232012-11-18 50 1142012-05-07100
Levels: 1142012-05-07100 1232012-11-18 50

请注意,如果添加重复行,则它将具有相同的级别(连接时)。

每行创建唯一键的另一个选项是使用interaction ,例如:

 transform(dat,id =interaction(dat))

 id_1 id_2 id_3       date value                   id
1    1    2    3 2012-11-18    50  1.2.3.2012-11-18.50
2    1    1    4 2012-05-07   100 1.1.4.2012-05-07.100

编辑

默认行为是保留所有因子水平。 这里使用drop = TRUE更好,因此从结果中删除未使用的因子级别。

  transform(dat,id =interaction(dat,drop=TRUE))

     id_1 id_2 id_3       date value                   id
    1    1    2    3 2012-11-18    50  1.2.3.2012-11-18.50
    2    1    1    4 2012-05-07   100 1.1.4.2012-05-07.100

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM