একটি ভেক্টরের প্রতিটি নবম উপাদানটি বের করুন


126

আমি একটি ভেক্টর তৈরি করতে চাই যাতে প্রতিটি উপাদানই হয় i+6th অন্য ভেক্টরের উপাদান।

উদাহরণস্বরূপ, দৈর্ঘ্যের 120 এর ভেক্টরে আমি দৈর্ঘ্যের 20 টির আরেকটি ভেক্টর তৈরি করতে চাই যেখানে প্রতিটি উপাদান i, i+6, i+12, i+18...প্রাথমিক ভেক্টরের মান , অর্থাৎ আমি মূলটির প্রতিটি 6th ষ্ঠ উপাদানটি বের করতে চাই।

উত্তর:


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

9
কমপক্ষে দীর্ঘ ভেক্টরগুলির জন্য seq.int (1L, দৈর্ঘ্য (ক), 6 এল) ব্যবহার করা ভাল
Wojciech Sobala

1
@ ওয়াজসিচসোবালা আপনি কি মন্তব্য করতে পারেন কেন এটি ভাল?
dpel

1
@ ডেভিডপেল মাইক্রোব্যাঙ্কমার্কগুলিতে seq.intদ্রুততর, তবে আমি সন্দেহ করি যে একটি আসল প্রোগ্রামে কোনও পারফরম্যান্স বাড়লে অন্যান্য অংশের চলমান সময়টি দ্বিধাহীন হবে।
Sean1708

আমি পাইথনকে আর এর সাথে তুলনা করতে ঘৃণা করি, তবে পাইরন আর কত দুর্দান্ত হতে পারে? a = 1:120; b = [::6]। পাইথন প্রাক্তনটি করতে পারে না, আর আধুনিক নয়।
bers

44

ক্রমযুক্ত টুকরো পাওয়ার (অন্য ইতিমধ্যে উল্লিখিত সিক সমাধানের বাইরে) পাওয়ার জন্য অন্য কৌশলটি হ'ল একটি সংক্ষিপ্ত যৌক্তিক ভেক্টর ব্যবহার এবং ভেক্টর পুনর্ব্যবহার করা:

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

2
এই পদ্ধতির একটি সুবিধা হ'ল এটি অস্থায়ীভাবে ব্যবহার করা যেতে পারে; ব্যবহার করার জন্য seqআপনাকে lengthভেক্টরকে কল করতে সক্ষম হতে হবে । letters[letters < 'm'][c(TRUE, FALSE, FALSE)]
ম্যাট চেম্বারস

27

আমি মনে করি আপনি দুটি জিনিস জিজ্ঞাসা করছেন যা অগত্যা একই নয়

আমি আসলটির প্রতিটি 6th ষ্ঠ উপাদানটি বের করতে চাই

আপনি একটি অনুক্রম সূচী দ্বারা এটি করতে পারেন:

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

আমি একটি ভেক্টর তৈরি করতে চাই যেখানে প্রতিটি উপাদানই অন্য ভেক্টরের i + ষ্ঠ উপাদান।

এটি করার একটি সহজ উপায় 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_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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.