मेरे पास घटनाओं की एक तालिका है जिसमें संकेत मिलता है कि वे कब होते हैं। वे पहले से ही समय से आदेशित हैं।

   events <- data.frame(name=c("sow", "water", "harvest"), time=c("March", "May", "June"), stringsAsFactors = FALSE)

मैं घटनाओं के सभी 2-तत्व क्रमपरिवर्तन की एक सूची प्राप्त करना चाहता हूं जो एक दूसरे के बाद हुआ (डुप्लिकेट के बिना)।

earlier    later
sow        water
sow        harvest
water      harvest

मैं कुछ प्रकार के संयोजन या क्रमपरिवर्तन प्राप्त करने के लिए आर में कुछ कार्यों को जानता हूं, लेकिन मुझे ऐसा कोई नहीं मिला है जो इनपुट के भीतर उपस्थिति के क्रम पर विचार करे।

क्या कोई ऐसा कार्य है जो यह करता है, या क्या मुझे अपना खुद का कार्यान्वयन करना है?

0
Rumi P. 4 फरवरी 2020, 20:24
यदि घटनाएँ समय के क्रम में हैं तो क्या आप यह कर सकते हैं: t(combn(events$name, 2))?
 – 
Ben
4 फरवरी 2020, 20:45
हां उन्हें आदेश दिया गया है, या कम से कम आसानी से ऑर्डर करने योग्य है क्योंकि मेरे पास कॉलम है। टी फंक्शन क्या है? मुझे याद नहीं है कि मैंने इसे पहले देखा हो, और r t की खोज से बहुत अधिक प्रासंगिक सामग्री नहीं मिलती है।
 – 
Rumi P.
4 फरवरी 2020, 20:50
आह, मैं इसे देखता हूँ, धन्यवाद। और क्या combn हमेशा संयोजनों को वापस करने की गारंटी देता है जैसे कि "छोटी संख्या" वाला आइटम पहले सूचीबद्ध होता है, या यह एक कार्यान्वयन विवरण है जो सैद्धांतिक रूप से संस्करणों के बीच बदल सकता है? मुझे सहायता फ़ाइल में उल्लिखित आदेश दिखाई नहीं दे रहा है (जिसे मैंने इस बार कंसोल में खोला है :))
 – 
Rumi P.
4 फरवरी 2020, 20:54
मुझे इसे उत्तर के रूप में देखकर खुशी होगी। किसी दिन बदलने वाले आदेश का नकारात्मक पक्ष विशुद्ध रूप से सैद्धांतिक है, और यह मौजूदा उत्तरों की तुलना में बहुत अधिक संक्षिप्त है।
 – 
Rumi P.
4 फरवरी 2020, 21:07
 – 
Joseph Wood
5 फरवरी 2020, 12:54

3 जवाब

सबसे बढ़िया उत्तर

मैं lapply का उपयोग करके इसी तरह के निष्कर्ष पर पहुंचा

df <- lapply(1:nrow(events), function(x) {
              expand.grid(events$name[x], events$name[(x+1):nrow(events)])})
do.call(rbind, df[-nrow(events)])
#>    Var1    Var2
#> 1   sow   water
#> 2   sow harvest
#> 3 water harvest

2
Allan Cameron 4 फरवरी 2020, 21:03

मान लें कि आपका कॉलम पहले से ही वांछित क्रम में है, आप combn फ़ंक्शन का उपयोग कर सकते हैं और स्थानांतरित कर सकते हैं:

t(combn(events$name, 2))

     [,1]    [,2]     
[1,] "sow"   "water"  
[2,] "sow"   "harvest"
[3,] "water" "harvest"
2
Ben 4 फरवरी 2020, 21:14

कुछ सोचने के बाद, मैंने महसूस किया कि संख्याओं पर विस्तार.ग्रिड का उपयोग करते समय इसे लागू करना अपेक्षाकृत आसान है।

events <- data.frame(name=c("sow", "water", "harvest"), month=c("3", "5", "6"), stringsAsFactors = FALSE)

ordered.pairs <- function(events.names.in.order) {

n <- length(events.names.in.order)
numbers.to.use <- 1:n
doubled.indices <- expand.grid(numbers.to.use, numbers.to.use)
doubled.indices <- doubled.indices[doubled.indices$Var1 < doubled.indices$Var2,]

event.pairs <- data.frame(earlier=events.names.in.order[doubled.indices$Var1], later=events.names.in.order[doubled.indices$Var2])

return(event.pairs)

}
0
Rumi P. 4 फरवरी 2020, 20:49