যদি আমি প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে আপনি কখন h_no
বাড়াবেন না তা সনাক্ত করতে এবং তারপরে বৃদ্ধি করতে চান class
। (আমি কীভাবে এই সমস্যাটি সমাধান করেছি তার মধ্য দিয়ে চলতে চলেছি, শেষে একটি স্বনির্ভর ফাংশন রয়েছে))
ওয়ার্কিং
আমরা কেবল h_no
মুহুর্তের জন্য কলামটি যত্ন করি, তাই আমরা এটি ডেটা ফ্রেম থেকে বের করতে পারি:
> h_no <- data$h_no
h_no
ক্রমবর্ধমান উপাদানগুলির মধ্যে পার্থক্য হয় negativeণাত্মক বা শূন্য হয় যখন আমরা কাজ না করে যা করতে পারি তা আমরা সনাক্ত করতে চাই । আর diff
ফাংশন সরবরাহ করে যা আমাদের পার্থক্যের ভেক্টর দেয়:
> d.h_no <- diff(h_no)
> d.h_no
[1] 1 1 1 -3 1 1 1 1 1 1 -6 1 1 1
আমাদের এটি একবার হয়ে গেলে, ইতিবাচক নয় এমনগুলি খুঁজে পাওয়া সহজ বিষয়:
> nonpos <- d.h_no <= 0
> nonpos
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[13] FALSE FALSE
আর-তে, TRUE
এবং FALSE
মূলত একইরূপে 1
এবং 0
তাই, আমরা যদি সংখ্যার যোগফল পাই nonpos
, তবে এটি উপযুক্ত স্পটগুলিতে (প্রায়) 1-এ বাড়বে। cumsum
ফাংশন (যা মূলত বিপরীত diff
) এটা করতে পারেন।
> cumsum(nonpos)
[1] 0 0 0 1 1 1 1 1 1 1 2 2 2 2
তবে, দুটি সমস্যা আছে: সংখ্যাগুলি খুব কম; এবং, আমরা প্রথম উপাদানটি মিস করছি (প্রথম শ্রেণিতে চারটি হওয়া উচিত)।
প্রথম সমস্যা সহজভাবে সমাধান হয়: 1+cumsum(nonpos)
। এবং দ্বিতীয়টির জন্য কেবল 1
ভেক্টরের সামনের অংশে একটি যুক্ত করা প্রয়োজন , যেহেতু প্রথম উপাদানটি সর্বদা ক্লাসে থাকে 1
:
> classes <- c(1, 1 + cumsum(nonpos))
> classes
[1] 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3
এখন, আমরা এটি দিয়ে আমাদের ডেটা ফ্রেমে আবার সংযুক্ত করতে পারি cbind
( class=
সিনট্যাক্স ব্যবহার করে আমরা কলামটি class
শিরোনাম দিতে পারি ):
> data_w_classes <- cbind(data, class=classes)
এবং data_w_classes
এখন ফলাফল রয়েছে।
সর্বশেষ ফলাফল
আমরা লাইনগুলি একসাথে সংকুচিত করতে পারি এবং এটির ব্যবহার আরও সহজ করার জন্য এটি সমস্ত একটি ফাংশনে গুটিয়ে রাখতে পারি:
classify <- function(data) {
cbind(data, class=c(1, 1 + cumsum(diff(data$h_no) <= 0)))
}
বা, যেহেতু এটি class
একটি ফ্যাক্টর হিসাবে বোধগম্য হয় :
classify <- function(data) {
cbind(data, class=factor(c(1, 1 + cumsum(diff(data$h_no) <= 0))))
}
আপনি হয় ফাংশন যেমন ব্যবহার করুন:
> classified <- classify(data) # doesn't overwrite data
> data <- classify(data) # data now has the "class" column
(এই সমস্যা সমাধানের এই পদ্ধতিটি ভাল কারণ এটি স্পষ্টভাবে পুনরাবৃত্তি এড়িয়ে চলে, যা সাধারণত আর এর জন্য সুপারিশ করা হয়, এবং প্রচুর মধ্যবর্তী ভেক্টর এবং তালিকা তৈরি করা এড়ানো হয় এবং এছাড়াও এটি কীভাবে এক লাইনে লিখিত হতে পারে তা খুব সুন্দর :))