B1  B2  B3  total
10  10   10  30
20  20   0   40
 0  20  10   30
 0  20   0   20

मेरे पास 400 से अधिक चर के साथ विस्तृत डेटाफ़्रेम है, ऊपर दिए गए डेटाफ़्रेम का एक सरल उदाहरण के रूप में उपयोग करते हुए, मैं निम्नलिखित शर्त के साथ एक नया डेटाफ़्रेम बनाना चाहता हूँ:

पंक्तियों के अनुसार, यदि कॉलम में सेल 0 से अधिक है, तो d$total के मान से बदलें।

आउटपुट इस तरह दिखेगा:

B1  B2  B3 
30  30  30  
40  40   0  
 0  30  30 
 0  20   0  

आर में ऐसा करने का सबसे अच्छा तरीका क्या है?

धन्यवाद।

1
Pei 27 नवम्बर 2020, 03:54

2 जवाब

सबसे बढ़िया उत्तर

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

#Assuming total is the last column, removing it
d1 <- d[-ncol(d)] 
d1[] <- ifelse(d1 > 0, d$total, 0)
d1

#  B1 B2 B3
#1 30 30 30
#2 40 40  0
#3  0 30 30
#4  0 20  0

यदि आप ifelse से बचना चाहते हैं तो आप गणितीय तरीके का उपयोग करके मूल्यों को बदल सकते हैं जो बहुत तेज होगा।

d1[] <- d$total * (d1 > 0)
2
Ronak Shah 27 नवम्बर 2020, 04:16

ऐसा करने के लिए आप lapply और ifelse का उपयोग कर सकते हैं:

dat <- read.table(header=TRUE, text="
B1  B2  B3  total
10  10   10  30
20  20   0   40
 0  20  10   30
 0  20   0   20")

dat <- lapply(dat, function(x) ifelse(x > 0, dat$total, x))
data.frame(dat)

#>   B1 B2 B3
#> 1 30 30 30
#> 2 40 40  0
#> 3  0 30 30
#> 4  0 20  0

या लूप का उपयोग करें:

for (x in colnames(dat)) {
  if (x != "total") {
    dat[[x]] <- ifelse(dat[[x]] > 0, dat$total, dat[[x]])
  }
}
1
Vincent 27 नवम्बर 2020, 04:23