एक वेक्टर के हर nth तत्व को निकालें


126

मैं एक वेक्टर बनाना चाहता हूं जिसमें प्रत्येक तत्व i+6thदूसरे वेक्टर का तत्व है।

उदाहरण के लिए, 120 की एक वेक्टर में मैं लंबाई 20 का एक और वेक्टर बनाना चाहता हूं जिसमें प्रत्येक तत्व i, i+6, i+12, i+18...प्रारंभिक वेक्टर का मूल्य है, अर्थात मैं मूल के हर 6 वें तत्व को निकालना चाहता हूं।

जवाबों:


160
a <- 1:120
b <- a[seq(1, length(a), 6)]

9
Seq.int (1L, लंबाई (a), 6L) का उपयोग करना बेहतर है, कम से कम लंबे वैक्टर के लिए
Wojciech Sobala

1
@OjciechSobala आप टिप्पणी कर सकते हैं कि यह बेहतर क्यों है?
dpel

1
@DavidPell माइक्रोबेनचर्च seq.intमें तेज है, लेकिन मुझे संदेह है कि किसी वास्तविक कार्यक्रम में किसी भी प्रदर्शन में वृद्धि अन्य भागों के चलने के समय से कम हो जाएगी।
सीन 1708

मैं आर के साथ पायथन की तुलना करने से नफरत करता हूं, लेकिन पाइरॉन कितना महान हो सकता है? a = 1:120; b = [::6]। अजगर पूर्व नहीं कर सकता, आर बाद वाला नहीं।
BERS

44

अनुक्रमिक टुकड़े प्राप्त करने के लिए एक और चाल (पहले से ही उल्लेख seq समाधान से परे) एक छोटी तार्किक वेक्टर का उपयोग करना और वेक्टर रीसाइक्लिंग का उपयोग करना है:

foo[ c( rep(FALSE, 5), TRUE ) ]

2
इस दृष्टिकोण का एक फायदा यह है कि इसका उपयोग अस्थायी पर किया जा सकता है; उपयोग करने के लिए seqआपको lengthवेक्टर पर कॉल करने में सक्षम होना चाहिए । letters[letters < 'm'][c(TRUE, FALSE, FALSE)]
मैट चैंबर्स

27

मुझे लगता है कि आप दो चीजें पूछ रहे हैं जो जरूरी नहीं कि एक ही हो

मैं मूल के हर 6 वें तत्व को निकालना चाहता हूं

आप अनुक्रम अनुक्रमित करके ऐसा कर सकते हैं:

foo <- 1:120
foo[1:20*6]

मैं एक वेक्टर बनाना चाहूंगा जिसमें प्रत्येक तत्व दूसरे वेक्टर का i + 6th तत्व है।

इसका एक आसान तरीका यह है कि जब तक FALSEs के साथ एक तार्किक कारक को पूरक न किया जाए i+6:

foo <- 1:120
i <- 1
foo[1:(i+6)==(i+6)]
[1]   7  14  21  28  35  42  49  56  63  70  77  84  91  98 105 112 119

i <- 10
foo[1:(i+6)==(i+6)]
[1]  16  32  48  64  80  96 112

इतना चालाक! मैंने इसे दूसरी दिशा में भी उपयोग किया है, foo[1:(i+6)!=(i+6)]अर्थात छठे को छोड़कर सभी मूल्यों का उत्पादन।
फ्रेड्रिक एरलैंडसन

1

वेक्टर में किसी भी प्रारंभिक स्थिति से प्रत्येक nth तत्व का चयन करने के लिए

nth_element <- function(vector, starting_position, n) { 
  vector[seq(starting_position, length(vector), n)] 
  }

# E.g.
vec <- 1:12

nth_element(vec, 1, 3)
# [1]  1  4  7 10

nth_element(vec, 2, 3)
# [1]  2  5  8 11
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.