Başka bir veri çerçevesindeki benzersiz değerlerin sayısına dayalı bir değişken nasıl oluşturulur?
Bu, yapmak istediğim şeyin basitleştirilmiş bir örneğidir.
Veri Kümesi 1 (DF1), elma verileri (deliklerin boyutu veya sayısı gibi) içerir ve ikinci bir veri kümesi (DF2), renk ve hangi elmada bulundukları dahil olmak üzere içlerinde bulunan solucanların bilgilerini içerir. Yapmak istediğim şey, DF1'e her bir elmada bulunan benzersiz renklerin (solucanların) sayısı ile bir değişken eklemek.
DF1<-data.frame(x=c("A1","A2","A3","A4","A5"),y=c(3,26,5,27,5))
DF2<-data.frame(Q=c("A1","A1","A1","A1","A1","A1","A2","A2","A3","A3","A3","A4","A5","A5","A5","A5"),R=c("red","red","blue","yellow","yellow","blue","orange","orange","green","red","red","blue","blue", "purple","black","red"),S=c(4,5,3,5,4,3,5,4,3,5,4,3,5,4,3,5))
R'de yeniyim ve çözmeye çalışırken düşündüm:
DF1$N.Colors<-length(unique(DF2$R[match(DF1$X,DF2$Q)]))
Ama bana istenen vektör yerine 0'larla dolu yeni bir değişken veriyor:
DF1$N.Colors<-c(3,1,2,1,4)
Yardımın için çok minnettarım
Yanıtlar
Bu, her iki veri kümesinin 'Q', 'x' sütunlarıyla birleştirilmesinden yararlanılarak, 'R'nin benzersiz değerlerini sayarak ve onu' DF1'de yeni bir sütuna atayarak yapılabilir.
library(data.table)
DF1$N.Colors <- setDT(DF2)[DF1, uniqueN(R), on = .(Q = x), by = .EACHI]$V1
Veya kullanarak tidyverse
library(dplyr)
DF2 %>%
group_by(x = Q) %>%
summarise(N.Colors = n_distinct(R)) %>%
right_join(DF1)
Bir base
çözelti aggregate()
ve merge()
:
merge(DF1, aggregate(N.Colors ~ Q, list(N.Colors = DF2$R, Q = DF2$Q), function(x) length(unique(x))), all.x = T, by.x = "x", by.y = "Q")
# x y N.Colors
# 1 A1 3 3
# 2 A2 26 1
# 3 A3 5 2
# 4 A4 27 1
# 5 A5 5 4