मेरे पास data1 नाम का एक डेटासेट है जिसमें हेडर year और count हैं।

मेरा नमूना डेटा इस तरह दिखता है:

  Year  Count
1 2005  3000  
2 2006  4000 
3 2007  5000
4 2008  6000   

मैं डेटा में एक और कॉलम जोड़ता हूं जो वार्षिक वृद्धि का काम करता है। यह मेरा कोड है:

data1growth <- data1 %>%
mutate(Growth = Count - lag(Count))

मैं अवधि नामक एक और कॉलम जोड़ने में सक्षम होना चाहता हूं ताकि मुझे निम्न आउटपुट मिल सके:

  Year  Count  Growth  Period
1 2005  3000   NA      NA
2 2006  4000   1000    2005-2006
3 2007  5000   1000    2006-2007
4 2008  6000   1000    2007-2008

वांछित आउटपुट प्राप्त करने के लिए मुझे म्यूटेट फ़ंक्शन में कौन सा कोड जोड़ना चाहिए, या क्या मैं पूरी तरह से निशान से बाहर हूं? किसी भी मदद की सराहना की जाती है।

सबको धन्यवाद।

0
Big Rick 2 सितंबर 2020, 14:15

3 जवाब

सबसे बढ़िया उत्तर
library(dplyr)
data1 %>%
  mutate(
    Growth = Count - lag(Count), 
    period = if_else(
      row_number() > 1, 
      paste0(lag(Year), "-", Year), 
      NA_character_
    )
  )

#   Year Count Growth    period
# 1 2005  3000     NA      <NA>
# 2 2006  4000   1000 2005-2006
# 3 2007  5000   1000 2006-2007
# 4 2008  6000   1000 2007-2008

प्रतिलिपि प्रस्तुत करने योग्य डेटा

data1 <- data.frame(
  Year  = seq(2005L, 2008L, 1L),
  Count = seq(3000L, 6000L, 1000L) 
)
1
sindri_baldur 2 सितंबर 2020, 16:01

यहाँ एक आधार R विकल्प है

transform(df1,
  Grouth = c(NA, diff(Count)),
  Period = c(NA, paste0(Year[-nrow(df1)], "-", Year[-1]))
)

जो देता है

  Year Count Grouth    Period
1 2005  3000     NA      <NA>
2 2006  4000   1000 2005-2006
3 2007  5000   1000 2006-2007
4 2008  6000   1000 2007-2008
0
ThomasIsCoding 2 सितंबर 2020, 16:41

यदि आप चाहते हैं कि 'अवधि' केवल एक स्ट्रिंग हो, तो आप बस एक और उत्परिवर्तित का उपयोग कर सकते हैं:

library(tidyverse)
data1 <- tibble(Year = 2005:2008, Count = c(3000, 4000, 5000, 6000))
data1growth <- data1 %>%
    mutate(Growth = Count - lag(Count))

# Period as string
data1growth %>%
    mutate(Period = paste0(Year, "-", Year-1))
#> # A tibble: 4 x 4
#>    Year Count Growth Period   
#>   <int> <dbl>  <dbl> <chr>    
#> 1  2005  3000     NA 2005-2004
#> 2  2006  4000   1000 2006-2005
#> 3  2007  5000   1000 2007-2006
#> 4  2008  6000   1000 2008-2007

# Period as string (don't include NA Growth)
data1growth %>%
    mutate(Period = ifelse(is.na(Growth), NA, paste0(Year, "-", Year-1)))
#> # A tibble: 4 x 4
#>    Year Count Growth Period   
#>   <int> <dbl>  <dbl> <chr>    
#> 1  2005  3000     NA <NA>     
#> 2  2006  4000   1000 2006-2005
#> 3  2007  5000   1000 2007-2006
#> 4  2008  6000   1000 2008-2007
0
csgroen 2 सितंबर 2020, 14:32