У меня есть набор данных, который содержит почтовый индекс, а также 2 индикаторные переменные, обозначающие расу и этническую принадлежность человека, а также количество для каждой комбинации. Доступ к данным можно получить следующим образом:
Data1990 <- read.table("https://www2.census.gov/programs-surveys/popest/tables/1990-2000/intercensal/st-co/stch-icen1990.txt")
names(Data1990)<-c("Year","ZIP","Age","Race","Ethnic","Count")
Data1990<-Data1990[,c(2,4:6)]
Данные выглядят так:
ZIP Race Ethnic Count
1 1001 1 1 239
2 1001 2 1 203
3 1001 1 1 821
4 1001 2 1 769
5 1001 1 1 1089
6 1001 2 1 961
Я хотел бы создать новый набор данных, который будет содержать долю белых неиспаноязычных (раса = 1 или 2 и этническая принадлежность = 1) в этом конкретном почтовом индексе. Я попытался получить сумму белых неиспаноязычных для каждого почтового индекса, используя forloop. Тем не менее, этот код просто дает переменной "White" 0 для каждого наблюдения.
zip<-unique(Data1990$ZIP)
Data1990New<-data.frame(zip,White=NA)
for(i in zip){
Data1990New[which(zip==i),]$White <- sum(Data1990[(Data1990$Race==1 |Data1990$Race==2)&Data1990$Ethnic==1&
Data1990$ZIP==Data1990New$i,][,4])
}
head(Data1990New)
Я хотел бы сделать это более эффективным способом, так как forloops работают медленно. Это актуально, но я думаю, что мой вопрос немного отличается, так как у меня есть переменная ID.
Заранее спасибо!