我有data.frame
4 列,“id1”、“id2”、“id3”和“name”,其中“id1”、“id2”和“id3”是很长的字符串。
我需要将“id1”、“id2”和“id3”连接在一起以生成新密钥;“id1”+“id2”+“id3”可能重复。换句话说,每个新键都是“id1”+“id2”+“id3”中值的新组合。
我想要这个简单而简短的新密钥,例如'key1','key2'等......
我有data.frame
4 列,“id1”、“id2”、“id3”和“name”,其中“id1”、“id2”和“id3”是很长的字符串。
我需要将“id1”、“id2”和“id3”连接在一起以生成新密钥;“id1”+“id2”+“id3”可能重复。换句话说,每个新键都是“id1”+“id2”+“id3”中值的新组合。
我想要这个简单而简短的新密钥,例如'key1','key2'等......
我建议.GRP
从“data.table”中使用它。它也不应该与 500k 行数据作斗争:
library(data.table)
as.data.table(DF)[, combined := .GRP, by = names(DF)][]
# key1 key2 key3 combined
# 1: b a b 1
# 2: b b a 2
# 3: a b b 3
# 4: b a b 1
# 5: b a a 4
# 6: b b b 5
# 7: b b a 2
# 8: a a b 6
# 9: b a a 4
# 10: b b b 5
如果您需要根据一组已排序的其他键对组合键进行排序,请setkey
在执行上述步骤之前使用。
像这样的东西?
set.seed(42)
DF <- data.frame(key1=sample(letters[1:2],10,TRUE),
key2=sample(letters[1:2],10,TRUE),
key3=sample(letters[1:2],10,TRUE))
DF <- within(DF,{newkey <- interaction(key1,key2,key3,drop=TRUE)
levels(newkey) <- paste0("key",seq_along(levels(newkey)))
})
# key1 key2 key3 newkey
# 1 b a b key4
# 2 b b a key2
# 3 a b b key5
# 4 b a b key4
# 5 b a a key1
# 6 b b b key6
# 7 b b a key2
# 8 a a b key3
# 9 b a a key1
# 10 b b b key6