मेरे पास कुछ डेटा है जैसे:

data(iris)

मैं स्तंभों का नाम बदलना चाहता हूं जैसे कि Species Y चर है और सभी अन्य चर भविष्यवक्ता हैं।

मेरे पास जो करंट है वह मुझे वह परिणाम नहीं देता जिसकी मुझे तलाश है।

iris %>%
  select(Species, everything()) %>% # move the Y variable to the "front"
  rename(Y = 1) %>%
  rename_at(vars(2:ncol(.)), ~ paste("X", seq(2:ncol(.)), sep = ""))

अपेक्षित आउटपुट उपनाम होंगे:

Y, X1, X2, X3, X4, X5... XN

r
0
user113156 28 सितंबर 2019, 01:03
select(iris, Species, everything()) %>% setNames(c("Y", paste0("X", seq_along(colnames(.))[-1]-1)))
 – 
r2evans
28 सितंबर 2019, 01:07
%>% का उपयोग colnames()<- जैसे प्रतिस्थापन कार्यों के साथ संभावित डुप्लिकेट
 – 
divibisan
28 सितंबर 2019, 01:24
वह पोस्ट गतिशील रूप से नाम बनाने से संबंधित नहीं है
 – 
camille
28 सितंबर 2019, 01:37
लेकिन पूछने वाले को पता लगता है कि गतिशील रूप से नाम कैसे बनाए जाते हैं - उनके कोड का वह हिस्सा काम करता है
 – 
divibisan
28 सितंबर 2019, 01:45

4 जवाब

नाम बनाने में कोई सबसेट करने से बचने के लिए मैं आपके चरणों को पुनर्व्यवस्थित कर रहा हूं। इसके बजाय, पहले कॉलम को X0 नाम दें, यह जानते हुए कि आप इसे Y में बदलने जा रहे हैं।

library(dplyr)

iris %>%
  select(Species, everything()) %>% 
  setNames(paste0("X", seq_along(.) - 1)) %>%
  rename(Y = 1) %>%
  head()
#>        Y  X1  X2  X3  X4
#> 1 setosa 5.1 3.5 1.4 0.2
#> 2 setosa 4.9 3.0 1.4 0.2
#> 3 setosa 4.7 3.2 1.3 0.2
#> 4 setosa 4.6 3.1 1.5 0.2
#> 5 setosa 5.0 3.6 1.4 0.2
#> 6 setosa 5.4 3.9 1.7 0.4
2
camille 28 सितंबर 2019, 01:48

क्या गलत हुआ

आपके कोड में गलती यह है कि यह मान लेता है कि दूसरा . (अनाम फ़ंक्शन में) एक tibble है, जबकि वास्तव में यह एक चरित्र वेक्टर है। इसलिए, ncol(.) अनुपयुक्त है, और इसके बजाय length(.) होना चाहिए। इसके अलावा, seq() की कोई आवश्यकता नहीं है और आपके द्वारा अनुरोधित आउटपुट को देखते हुए, इसे 1 से शुरू होना चाहिए। अंत में, आप इसके साथ ठीक होंगे:

iris %>%
  select(Species, everything()) %>%
  rename(Y = 1) %>%
  rename_at(vars(2:ncol(.)), ~ paste("X", 1:length(.), sep = ""))

अन्य उत्तर इस ऑपरेशन को व्यक्त करने के वैकल्पिक तरीके प्रदान करते हैं। एक संभवतः क्लीनर संस्करण होगा

iris %>%
  select(Species, everything()) %>%
  rename(Y = 1) %>%
  rename_with(~ str_c("X", seq_along(.)), -1)
2
merv 5 फरवरी 2021, 02:24

आप कभी-कभी बारीक rename फ़ंक्शन का उपयोग करने के बजाय सीधे colnames सेट कर सकते हैं:

iris %>%
    select(Species, everything()) %>% # move the Y variable to the "front"
    `colnames<-`(c('Y', paste("X", seq(2:ncol(.)), sep = ""))) %>%
    head

       Y  X1  X2  X3  X4
1 setosa 5.1 3.5 1.4 0.2
2 setosa 4.9 3.0 1.4 0.2
3 setosa 4.7 3.2 1.3 0.2
4 setosa 4.6 3.1 1.5 0.2
5 setosa 5.0 3.6 1.4 0.2
6 setosa 5.4 3.9 1.7 0.4

यह प्रश्न बताता है कि क्यों `colnames<-` पाइप में एक फ़ंक्शन के रूप में कार्य करता है: %>% का उपयोग colnames()<- जैसे प्रतिस्थापन कार्यों के साथ करें

0
divibisan 28 सितंबर 2019, 01:47

आधार r कार्यों के साथ समाधान:

colnames(iris) <- c("X1", "X2", "X3", "X4", "Y") # rename columns
iris[,c(5,1,2,3,4)] # reorder 

            Y  X1  X2  X3  X4
 #  1  setosa 5.1 3.5 1.4 0.2
 #  2  setosa 4.9 3.0 1.4 0.2
 #  3  setosa 4.7 3.2 1.3 0.2
 #  4  setosa 4.6 3.1 1.5 0.2
 #  5  setosa 5.0 3.6 1.4 0.2
0
PsychometStats 28 सितंबर 2019, 04:06