我有一个两级数据集(让我们说在学校里嵌套的类)并且数据集已编码
像这样:
School Class
A 1
A 1
A 2
A 2
B 1
B 1
B 2
B 2
但是要运行分析,我需要数据具有唯一的类ID,无论学校成员身份如何。
School Class NewClass
A 1 1
A 1 1
A 2 2
A 2 2
B 1 3
B 1 3
B 2 4
B 2 4
我尝试使用transform和ddply,但我不确定如何让NewClass为School和Class的每个组合不断增加到更大的数字。我可以想到一些不太优雅的方法来做到这一点,但我确信有一些我现在想不到的简单解决方案。任何帮助将不胜感激!
答案 0 :(得分:3)
使用interaction
创建一个因子,然后将其强制转换为整数:
transform(dat,nn = as.integer(interaction(Class,School)))
School Class nn
1 A 1 1
2 A 1 1
3 A 2 2
4 A 2 2
5 B 1 3
6 B 1 3
7 B 2 4
8 B 2 4
答案 1 :(得分:3)
使用data.table
:
library(data.table)
dt = as.data.table(your_df)
dt[, NewClass := .GRP, by = list(School, Class)]
dt
# School Class NewClass
#1: A 1 1
#2: A 1 1
#3: A 2 2
#4: A 2 2
#5: B 1 3
#6: B 1 3
#7: B 2 4
#8: B 2 4
.GRP
只是一个群组计数器。另请注意,您并不需要执行此操作,并且可以在您需要执行的任何list(School, Class)
操作中继续使用上述组合by
。
请注意,在data.table版本>= 1.9.0
中,会导出一个函数setDT
,通过引用将data.frame
转换为data.table
(不进行复制),以防万一你想坚持使用data.tables。
require(data.table) ## >= 1.9.0
setDT(your_df) ## your_df is now a data.table, changed by reference.