আমি জানি এখানে প্রায় একই ধরণের প্রশ্ন রয়েছে, তবে এর মধ্যে কোনওটিই আমার কাছে সঠিক সমস্যার সমাধান করছে বলে মনে হয় না।
set.seed(4)
df = data.frame(
Key = c("A", "B", "A", "D", "A"),
Val1 = rnorm(5),
Val2 = runif(5),
Val3 = 1:5
)
আমি সারিগুলির জন্য কলামের মান কলামগুলির মান শূন্য করতে চাই যেখানে কী == "এ" কলামের নামগুলি একটি এর মাধ্যমে উল্লেখ করা হয়েছে grep:
cols = grep("Val", names(df), value = TRUE)
সাধারণত আমি এই ক্ষেত্রে যা চাই তা অর্জন করতে আমি এটি এর data.tableমতো ব্যবহার করব :
library(data.table)
df = as.data.table(df)
df[Key == "A", (cols) := 0]
এবং পছন্দসই আউটপুটটি এরকম:
Key Val1 Val2 Val3
1 A 0.000000 0.00000000 0
2 B -1.383814 0.55925762 2
3 A 0.000000 0.00000000 0
4 D 1.437151 0.05632773 4
5 A 0.000000 0.00000000 0
যাইহোক এবার আমি dplyrযেমন টিম প্রজেক্টে কাজ করছি যেখানে সবাই এটি ব্যবহার করে তাই আমাকে ব্যবহার করা দরকার। আমি সবেমাত্র ডেটা সরবরাহ করেছি তা বর্ণনামূলক এবং আমার আসল ডেটাটি হল> 5 মান সারি 16 মান কলাম আপডেট করা। আমি যে সমাধান করতে পারলাম কেবল সেগুলিই mutate_atএরকম ব্যবহার করে :
df %>% mutate_at(.vars = vars(cols), .funs = function(x) ifelse(df$Key == "A", 0, x))
যাইহোক, এটি আমার বাস্তব ডেটাতে অত্যন্ত ধীর বলে মনে হচ্ছে । আমি এমন একটি সমাধান খুঁজে পাওয়ার আশা করছিলাম যা আরও মার্জিত এবং আরও গুরুত্বপূর্ণভাবে, দ্রুত।
আমি অনেকগুলি সংমিশ্রণগুলি ব্যবহার করে map, অকেজো ব্যবহার করে !!, ব্যবহার করে getএবং :=(যা বিরক্তিকরভাবে :=ডেটা.টিটেবলের মধ্যে মুখোশ পেতে পারে ) ইত্যাদি ব্যবহার করে চেষ্টা করেছি , তবে আমি মনে করি যে এই কাজটি কীভাবে বৈধ সমাধান তৈরি করার পক্ষে যথেষ্ট গভীর নয় of