একটি টিবল বিবেচনা করুন যেখানে প্রতিটি কলাম এমন একটি চরিত্রের ভেক্টর যা অনেকগুলি মান নিতে পারে - আসুন "এফ" এর মাধ্যমে "এ" বলি।
library(tidyverse)
sample_df <- tibble(q1 = c("A", "B", "C"), q2 = c("B", "B", "A"))
আমি একটি ফাংশন তৈরি করতে চাই যা একটি কলামের নামটিকে একটি আর্গুমেন্ট হিসাবে গ্রহণ করে এবং সেই কলামটি পুনর্নির্মাণ করে যাতে কোনও উত্তর "এ" একটি এনএ হয়ে যায় এবং ডিএফ অন্যথায় যেমন ফিরে আসে। এটি এভাবে ডিজাইনের কারণ হ'ল একটি বিস্তৃত পাইপলাইনে ফিট করা যা প্রদত্ত কলামটি ব্যবহার করে একটি ক্রিয়াকলাপ পরিচালনা করে।
এটি করার অনেকগুলি উপায় রয়েছে। তবে আমি সর্বোত্তম প্রতিচ্ছবিবদ্ধ / পরিষ্কার / পরিপাটি পদ্ধতির কী হবে তা বুঝতে আগ্রহী। প্রথমত, প্রশ্নের নামটি পরিবর্তিত ক্রিয়াটির বাম দিকে থাকা দরকার, তাই আমরা !!
এবং :=
অপারেটরগুলি যথাযথভাবে ব্যবহার করি । তবে তারপরে, ডান হাতটি কী রাখবেন?
fix_question <- function(df, question) {
df %>% mutate(!!question := recode(... something goes here...))
}
fix_question(sample_df, "q1") # should produce a tibble whose first column is (NA, "B", "C")
আমার প্রাথমিক চিন্তা ছিল এটি কার্যকর হবে:
df %>% mutate(!!question := recode(!!question, "A" = NA_character_))
তবে অবশ্যই ফাংশনের অভ্যন্তরে ব্যাং-ব্যাং কেবল আক্ষরিক চরিত্রের স্ট্রিং (যেমন "কিউ 1") প্রদান করে returns ডান হাতের উপাত্তের উপর ভিত্তি করে ডেটা রেফারেন্স করতে, বেস আর [[
অপারেটরটি ব্যবহার করে এবং .
ডিপ্লায়ার থেকে কনস্ট্রাক্টের উপর নির্ভর করে , এবং এটি কাজ করে, তাই এক অর্থে আমি আমার অন্তর্নিহিত সমস্যাটির সমাধান করেছি: আমি হ্যাকি রুটের মতো যা মনে করি তা শেষ করেছিলাম:
df %>% mutate(!!question := recode(.[[question]], "A" = NA_character_))
আমি এমন লোকদের কাছ থেকে প্রতিক্রিয়া জানাতে আগ্রহী যারা এই কাজটি করার মতো আরও একটি মুরগী উপায় আছে কিনা এই বিষয়ে আশাবাদী যে একটি কাজের উদাহরণ দেখলে পরিদর্শনকারী অনুষ্ঠানের আরও সাধারণভাবে আমার ধারণা বাড়বে hopes কোন চিন্তা?
q1
(চিহ্ন) এবং "q1"
(স্ট্রিং) উভয়ের সাথে কাজ করে :df %>% mutate_at( vars(!!ensym(question)), recode, A = NA_character_)