मैंने आपके नमूना डेटा को थोड़ा और दिलचस्प बनाने की कोशिश की है। आपके नमूना डेटा में वर्तमान में केवल एक अद्वितीय "एसपीपी" प्रति "सीएनटीई" है।
set.seed(1)
mydf <- data.frame(
Cnty = rep(c("185", "31", "189"), times = c(5, 3, 2)),
Yr = c(rep(c("1999", "2000"), times = c(3, 2)),
"1999", "1999", "2000", "2000", "2000"),
Plt = "20001",
Spp = sample(c("Bitternut", "Pignut", "WO"), 10, replace = TRUE),
DBH = runif(10, 0, 15)
)
mydf
# Cnty Yr Plt Spp DBH
# 1 185 1999 20001 Bitternut 3.089619
# 2 185 1999 20001 Pignut 2.648351
# 3 185 1999 20001 Pignut 10.305343
# 4 185 2000 20001 WO 5.761556
# 5 185 2000 20001 Bitternut 11.547621
# 6 31 1999 20001 WO 7.465489
# 7 31 1999 20001 WO 10.764278
# 8 31 2000 20001 Pignut 14.878591
# 9 189 2000 20001 Pignut 5.700528
# 10 189 2000 20001 Bitternut 11.661678
अगला, जैसा कि सुझाव दिया गया है, tapply
यहां एक अच्छा उम्मीदवार है। जिस डेटा को आप ढूंढ रहे हैं उसे प्राप्त करने के लिए unique
और length
मिलाएं।
with(mydf, tapply(Spp, Cnty, FUN = function(x) length(unique(x))))
# 185 189 31
# 3 2 2
with(mydf, tapply(Spp, list(Cnty, Yr), FUN = function(x) length(unique(x))))
# 1999 2000
# 185 2 2
# 189 NA 2
# 31 1 1
आप सरल सारणीकरण में रुचि रखते हैं (नहीं अद्वितीय मानों की) है, तो आप table
और ftable
का पता लगाने कर सकते हैं:
with(mydf, table(Spp, Cnty))
# Cnty
# Spp 185 189 31
# Bitternut 2 1 0
# Pignut 2 1 1
# WO 1 0 2
ftable(mydf, row.vars="Spp", col.vars=c("Cnty", "Yr"))
# Cnty 185 189 31
# Yr 1999 2000 1999 2000 1999 2000
# Spp
# Bitternut 1 1 0 1 0 0
# Pignut 2 0 0 1 0 1
# WO 0 1 0 0 2 0
आपका स्वागत करने के लिए इतना। आपने क्या प्रयास किया है और आप समस्याओं में कहां चल रहे हैं, इसके बारे में और अधिक साझा करना बेहतर उत्तर देगा। लेकिन, आपको प्रारंभ करने के लिए, 'कुल' और 'tapply' जैसे कार्य उपयोगी होंगे। '? कुल' का उपयोग करके फ़ंक्शन से सहायता टेक्स्ट को देखना याद रखें। – Justin