如何在R的data.table对象中更改每个分组的第一个值?
要更改data.table对象中每个分组的第一个值,我们可以使用单个方括号来访问和更改值为所需的值。例如,如果我们有一个名为DT的data.table对象,其中包含由Class定义的分组列和由Response定义的数值列,那么可以使用命令DT[,Response:=c(2,Response[-]),by=Class]将每个Class的Response的第一个值设置为5。
考虑以下data.table对象:
示例
library(data.table) Group<-sample(c("A","B","C"),20,replace=TRUE) DT1<-data.table(Group,y) DT1
输出
Group y 1: B 5 2: A 7 3: A 4 4: B 3 5: B 5 6: C 7 7: C 5 8: A 4 9: C 6 10: A 5 11: B 6 12: C 5 13: A 9 14: A 4 15: B 5 16: C 3 17: C 3 18: B 8 19: A 7 20: C 2
将DT1中每个Group的y的第一个值更改为2:
示例
DT1[,y:=c(2,y[-1]),by=Group] DT1
输出
Group y 1: B 2 2: A 2 3: A 4 4: B 3 5: B 5 6: C 2 7: C 5 8: A 4 9: C 6 10: A 5 11: B 6 12: C 5 13: A 9 14: A 4 15: B 5 16: C 3 17: C 3 18: B 8 19: A 7 20: C 2
示例
Class<-sample(c("First","Second","Third","Fourth"),20,replace=TRUE) x<-rpois(20,1) DT2<-data.table(Class,x) DT2
输出
Class x 1: Fourth 1 2: Second 2 3: Second 0 4: Third 0 5: Second 0 6: First 1 7: Third 2 8: First 1 9: Third 0 10: Fourth 3 11: Fourth 0 12: Second 0 13: Third 2 14: Fourth 3 15: Fourth 0 16: Fourth 3 17: Second 0 18: Fourth 1 19: First 0 20: Second 2
将DT2中每个Class的x的第一个值更改为3:
示例
DT2[,x:=c(3,x[-1]),by=Class] DT2
输出
Class x 1: Fourth 3 2: Second 3 3: Second 0 4: Third 3 5: Second 0 6: First 3 7: Third 2 8: First 1 9: Third 0 10: Fourth 3 11: Fourth 0 12: Second 0 13: Third 2 14: Fourth 3 15: Fourth 0 16: Fourth 3 17: Second 0 18: Fourth 1 19: First 0 20: Second 2
广告