আর-তে ডাটা ফ্রেমে কলামের নাম কীভাবে পরিবর্তন করবেন? [বন্ধ]


9
 names(mydat)[c(name)]<-c("newname") 

এ থেকে, আমি জানি যে ডেটা ফ্রেম মাইড্যাটের কলাম / পরিবর্তনশীল নাম "নাম" "নতুন নাম" দিয়ে প্রতিস্থাপন করা হয়েছে।

আমার প্রশ্নটি যদি হয়, আমি একটি লুপ দিয়ে এটি করতে চাই যাতে আমার মতো কিছু থাকে:

newname1 newname2 newname3 newname4 এবং আরও কিছু, আমি কীভাবে এটি করব?

এটি যা করেছিল এবং এটি কার্যকর হয়নি:

for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}

এটি কোড করার কোনও উপায় আছে? যারা সাহায্য করতে পারে তাদের সকলকে অনেক ধন্যবাদ। ওউসু ইসহাক


4
এই প্রশ্নটি অফ-টপিক হিসাবে উপস্থিত বলে মনে হচ্ছে কারণ এটি খালি প্রোগ্রামিং সম্পর্কে।
গুং - মনিকা পুনরায়

আপনার যদি কিছু কুৎসিত পরিবর্তনশীল নাম (যেমন, abcde_1_1, abcde_2_2, abcde_3_3 ...) পুনঃনামকরণ করা দরকার তবে এটি গুণগতত থেকে ডাউনলোড করা কিছু ডেটাसेटে প্রায়শই ঘটে: ugly_vars <- names(dplyr::select(df, starts_with("abcde_"))) names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
জেটল্যাগ

উত্তর:


10

সর্বাধিক সুস্পষ্ট সমাধান হ'ল নিম্নলিখিতগুলির সাথে লুপের জন্য আপনার কোডটি পরিবর্তন করতে হবে:

   names(mydat)[c(name)] <- paste("newname",i,sep="")

তবে আপনার পরিবর্তনশীলটি কী তা আপনাকে স্পষ্ট করতে হবে name। এই মুহুর্তে এই লুপটি একক কলামের 4 টি নাম পরিবর্তন করবে।

সাধারণভাবে আপনি যে নামগুলি পরিবর্তন করতে চান তা ভেক্টরে থাকলে, এটি একটি স্ট্যান্ডার্ড সাবসেটিং পদ্ধতি:

 names(mydat)[names(mydat)%in% names_to_be_changed] <- name_changes

হ্যালো এমপিক্টাস, আপনার সমাধানটি দুর্দান্তভাবে কাজ করে। অনেক ধন্যবাদ. এবং পাশাপাশি সকলকে ধন্যবাদ
পুত্র

1
@ ওউসু, এই সাইটে কৃতজ্ঞতা প্রকাশের উত্তর এবং তাদের গ্রহণযোগ্যতা upvoting হয়। প্রশ্নগুলি দেখুন । যে কোনও উপায়ে, সহায়ক হতে পেরে আনন্দিত।
এমপিক্টাস

6

ব্যবহার করার চেষ্টা করুন sprintfঅথবা paste, এভাবে:

names(mydat)<-sprintf("name%d",1:10)

এছাড়াও, মনে রাখবেন যে এটি names(mydat)[c(name)]একটি কম বাজে কথা; c(name)ন্যায়সঙ্গত লেখার সমতুল্য nameএবং এর অর্থ "নামক ভেরিয়েবলের মান পান name; বন্ধনী কমপক্ষে এর উপাদানগুলি বের করতে পারে names(mydat)তবে কেবল nameভেরিয়েবলের একটি সংখ্যা বা বুলিয়ান সূচক থাকে index

আপনি কলাম নামক প্রতিস্থাপন করতে চান nameসঙ্গে name1, name2, ..., nameN, ভালো কিছু ব্যবহার করুন:

names(mydat)[names(mydat)=="name"]<-sprintf("name%d",1:sum(names(mydat)=="name"))

সম্পাদনা: আচ্ছা, আপনি যদি কেবল অনুলিপি করা কলামের নামগুলি মুছতে চান তবে আরও সহজ উপায়ও রয়েছে; আর এর একটি make.namesফাংশন রয়েছে যা এই সমস্যাটিকে সংশোধন করে; এটি এভাবে ব্যবহার করা যেতে পারে:

names(mydat)<-make.names(names(mydat),unique=TRUE)

এমনকি সংক্ষিপ্ততর, কেবল এটি লেখার মাধ্যমেই পাওয়া যায়:

data.frame(mydat)->mydat #The magic is in check.names, but it is TRUE by default

@mbq, == স্ট্রিংগুলির সাথে আংশিক মিল রয়েছে?
এমপিক্টাস

@ এমপিক্টাস না, তবে এখানে কেবল সঠিক মিলের প্রয়োজন। greplআরও সাধারণ কাজ করা ঠিক হবে।

@ এমবিকিউ, হ্যাঁ তবে এটি ধরে নিয়েছে যে একই নামের সাথে একাধিক কলাম রয়েছে। আর এটি অনুমতি দেয় তবে আমি এই বৈশিষ্ট্যটি ব্যবহার করা এড়াতে চেষ্টা করব।
এমপিক্টাস

@ এমপিক্টাস স্পষ্টতই ওপি-র মত, এই প্রশ্নটি।

@ এমবিকিউ ধন্যবাদ (মায়াড্যাট) [সি (নাম) সাথে বিভ্রান্তি পরিষ্কার করার জন্য ধন্যবাদ ] যেহেতু ওপি লিখেছেন আমি জানি যে কলাম / পরিবর্তনশীল নাম "নাম" আমি "ওয়াও যে সম্ভব?" এবং নাম দিয়ে নামগুলি অ্যাক্সেস করার চেষ্টা করেছিল ... আমাকে বোকা;)। আমি কি প্রশ্নটি বিনয়ের সাথে সম্পাদনা করতে পারি?
স্টিফেন

5

আমার একই সমস্যা ছিল এবং আমি এই কোড দিয়ে এটি সমাধান করেছি:

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.