मुझे एक फ़ंक्शन बनाने की ज़रूरत है जो 2 चर और एक तालिका (?) (x, y, तालिका) पर निर्भर करता है। सबसे पहले इस फ़ंक्शन को तालिका में प्रत्येक पंक्ति के माध्यम से लूप करने की आवश्यकता होती है और 'X' कॉलम मान (1 या 0) के आधार पर एक अलग क्रिया करें:

जब x कॉलम = 1 तब पंक्ति 'y' बार कॉपी करें। फिर एक नेस्टेड लूप में एक कॉलम बनाएं जो पंक्ति को कॉपी किए जाने के समय 1 से y तक गिना जाए।

जब x कॉलम = 0 तब पंक्ति को छोड़ दें कि यह कैसा है।

इनपुट का एक उदाहरण होगा

enter image description here

आउटपुट होगा

enter image description here

मैंने अगला कोड करने की कोशिश की लेकिन ईमानदारी से मैं लूप के साथ बहुत अच्छा नहीं हूं।

    My_function <- function(x,y,table) {

      for (i in 1:nrow(table)) {

        if(table[,which(colnames(table) = as.character(x)] == 1){
          dummy = table[i,]
          final_dummy = NULL

          for(j in 1:dummy$y){
            dummy_2 = dummy
            final_dummy = rbind(final_dummy,dummy_2)
                                                     }
        } else if(table[,which(colnames(table) = as.character(x)] == 0){
              table[i,] 
      }
    }
    }
0
Rodrigo Ignacio Sapunar Bernab 26 अप्रैल 2020, 05:53
SO और R में आपका स्वागत है। अपने इनपुट और आउटपुट अपेक्षाओं की छवियां डालने के लिए धन्यवाद। यह उत्तरदाताओं की मदद करेगा यदि आप अपने इनपुट डेटा को डेटाफ़्रेम प्रारूप में शामिल करते हैं उदा। df <- data.frame(a = c(1, 2, 3), b = c("a", "b", "c")) जाहिर तौर पर आपके अपने डेटा के साथ!
 – 
Peter
26 अप्रैल 2020, 09:56

2 जवाब

आप भी उपयोग कर सकते हैं:

library(tidyverse)
df <- tibble(col = c(letters[1:3]), x = c(1, 0, 1), y = c(2, 3, 4))

df %>% 
  mutate(uncY = if_else(x == 0, 1, y)) %>% 
  uncount(uncY, .id = "id")

# A tibble: 7 x 4
  col       x     y    id
  <chr> <dbl> <dbl> <int>
1 a         1     2     1
2 a         1     2     2
3 b         0     3     1
4 c         1     4     1
5 c         1     4     2
6 c         1     4     3
7 c         1     4     4
1
Yuriy Saraykin 26 अप्रैल 2020, 09:01

आप फ़ंक्शन को इस प्रकार लिख सकते हैं:

My_function <- function(data) {
  out <- data[with(data, rep(seq_along(col), pmax(colx * coly, 1))), ]
  rownames(out) <- NULL
  out$num <- with(out, ave(colx, col, FUN = seq_along))
  return(out)
}

और इसे बुलाओ

My_function(df)

#  col colx coly num
#1   a    1    2   1
#2   a    1    2   2
#3   b    0    3   1
#4   c    1    4   1
#5   c    1    4   2
#6   c    1    4   3
#7   c    1    4   4

डेटा

df <- data.frame(col = letters[1:3], colx = c(1, 0, 1), coly = c(2, 3, 4))
0
Ronak Shah 26 अप्रैल 2020, 06:23