अनुक्रम में दोहराया मूल्यों का क्रम बनाएं?


83

मुझे बार-बार संख्याओं के अनुक्रम की आवश्यकता है, यानी 1 1 ... 1 2 2 ... 2 3 3 ... 3 etc.जिस तरह से मैंने इसे लागू किया वह था:

  nyear <- 20
  names <- c(rep(1,nyear),rep(2,nyear),rep(3,nyear),rep(4,nyear),
             rep(5,nyear),rep(6,nyear),rep(7,nyear),rep(8,nyear))

जो काम करता है, लेकिन अनाड़ी है, और स्पष्ट रूप से अच्छी तरह से पैमाने पर नहीं है।

मैं अनुक्रम में प्रत्येक बार एन पूर्णांक एम बार कैसे दोहराता हूं?

  • मैंने घोंसले के शिकार की कोशिश की seq()और rep()जो मुझे चाहिए था, वह नहीं किया।
  • मैं स्पष्ट रूप से ऐसा करने के लिए एक लूप लिख सकता हूं, लेकिन ऐसा करने के लिए एक आंतरिक तरीका होना चाहिए!

जवाबों:


164

आप इस each=तर्क से चूक गए rep():

R> n <- 3
R> rep(1:5, each=n)
 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
R> 

इसलिए आपका उदाहरण एक साधारण के साथ किया जा सकता है

R> rep(1:8, each=20)

1

आपके उदाहरण के लिए, डिर्क का उत्तर एकदम सही है। यदि आप के बजाय एक डेटा फ्रेम था और उस तरह के अनुक्रम को एक कॉलम के रूप में जोड़ना चाहते थे, तो आप भी groupग्रुपडैट 2 (अस्वीकरण: मेरा पैकेज) का उपयोग करके समूहों में डेटा पॉइंट को लालच से विभाजित कर सकते हैं।

# Attach groupdata2
library(groupdata2)
# Create a random data frame
df <- data.frame("x" = rnorm(27))
# Create groups with 5 members each (except last group)
group(df, n = 5, method = "greedy")
         x .groups
     <dbl> <fct>  
 1  0.891  1      
 2 -1.13   1      
 3 -0.500  1      
 4 -1.12   1      
 5 -0.0187 1      
 6  0.420  2      
 7 -0.449  2      
 8  0.365  2      
 9  0.526  2      
10  0.466  2      
# … with 17 more rows

इस प्रकार के समूहीकरण कारक को बनाने के लिए कई तरीके हैं। जैसे समूहों की संख्या, समूह के आकार की एक सूची, या समूह होने से शुरू होता है जब किसी स्तंभ में मान पिछली पंक्ति में मान से भिन्न होता है (उदाहरण के लिए यदि कोई स्तंभ c("x","x","y","z","z")समूह कारक होता है c(1,1,2,3,3)


1

एक और base Rविकल्प हो सकता है gl():

gl(5, 3)

जहां उत्पादन एक कारक है:

 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
Levels: 1 2 3 4 5

यदि पूर्णांक आवश्यक हैं, तो आप इसे परिवर्तित कर सकते हैं:

as.numeric(gl(5, 3))

 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.