Başka bir veri çerçevesindeki benzersiz değerlerin sayısına dayalı bir değişken nasıl oluşturulur?

Aug 16 2020

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

3 akrun Aug 16 2020 at 02:11

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)
3 DarrenTsai Aug 16 2020 at 02:19

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