R में डेटा फ्रेम में कॉलम के नाम कैसे बदलें? [बन्द है]


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

इससे मुझे पता है कि डेटा फ्रेम mydat के कॉलम / चर नाम "नाम" को "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 ...) का नाम बदलने की आवश्यकता है, जैसा कि अक्सर Qualtrics से डाउनलोड किए गए कुछ डेटासेट में होता है: ugly_vars <- names(dplyr::select(df, starts_with("abcde_"))) names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
JetLag

जवाबों:


10

सबसे स्पष्ट समाधान निम्नलिखित के साथ लूप के लिए अपना कोड बदलना होगा:

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

लेकिन आपको यह स्पष्ट करने की आवश्यकता है कि आपका चर क्या है name है। फिलहाल यह लूप सिंगल कॉलम के 4 नाम करेगा।

सामान्य तौर पर यदि आप जिन नामों को बदलना चाहते हैं, वे वेक्टर में हैं, यह एक मानक सबसेट प्रक्रिया है:

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

नमस्कार Mpiktas, आपका समाधान उत्कृष्ट रूप से काम करता है। बहुत धन्यवाद। और सभी के लिए धन्यवाद
बेटा

1
@ ओवसु, इस साइट में आभार की अभिव्यक्ति उत्तर और उनकी स्वीकृति का उत्थान है। फेक देखें । किसी भी तरह, मददगार होने की खुशी।
एमपिकटास

6

इस तरह का उपयोग करने का प्रयास करें sprintfया paste:

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

इसके अलावा, ध्यान दें कि names(mydat)[c(name)]अधिक-कम बकवास है; c(name)सिर्फ लिखने के बराबर है nameऔर इसका अर्थ है "चर नामक मान प्राप्त करें name'; ब्रैकेट में कम से कम अर्क तत्व होंगे, names(mydat)लेकिन केवल अगर nameचर एक संख्यात्मक या बूलियन इंडेक्स रखता है।

यदि आप कॉलम बुलाया बदलना चाहते हैं 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, == तार के लिए आंशिक मिलान करता है?
mpiktas

@mpiktas नहीं, लेकिन यहां केवल सटीक मिलान की आवश्यकता है। greplअधिक सामान्य काम करना ठीक रहेगा।

@mbq, हाँ, लेकिन यह माना जाता है कि एक ही नाम के साथ कई कॉलम हैं। आर यह अनुमति देता है, लेकिन मैं इस सुविधा का उपयोग करने से बचने की कोशिश करता हूं।
mpiktas

@mpiktas जाहिर है, इस प्रकार इस सवाल पर ओपी है।

@mbq नाम (mydat) [सी (नाम)] के साथ भ्रम को स्पष्ट करने के लिए धन्यवाद, क्योंकि ओपी ने लिखा है कि मुझे पता है कि कॉलम / चर नाम "नाम" मैं "वाह कि संभव था?" और नाम से नाम तक पहुँचने की कोशिश की ... मुझे बेवकूफ;)। क्या मुझे विनम्रतापूर्वक प्रश्न को संपादित करने का सुझाव देना चाहिए?
स्टीफन

5

मुझे भी यही समस्या थी और मैंने इसे इस कोड के साथ हल किया:

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.