আমি জানি এখানে প্রায় একই ধরণের প্রশ্ন রয়েছে, তবে এর মধ্যে কোনওটিই আমার কাছে সঠিক সমস্যার সমাধান করছে বলে মনে হয় না।
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