मेरे पास एकाधिक कॉलम का डेटा फ्रेम है। मैं निम्नानुसार शर्तों के आधार पर एक नया कॉलम बनाना चाहता हूं:

यदि दोनों कोला और colB > 0 या दोनों colA और colB <0; colC "हाँ" होगा अन्यथा colC "नहीं" होगा।

मैं निम्नानुसार एक नया कॉलम बनाने के लिए आर में ifelse कथन का उपयोग करने का प्रयास कर रहा था:

leadsnp4$ConcordEffect=ifelse(leadsnp4[paste0('Z_recalculated_in_',trait1)] > 0 & leadsnp4[paste0('Z_recalculated_in_',trait2)] > 0,'Yes',
                              ifelse(leadsnp4[paste0('Z_recalculated_in_',trait1)] < 0 & leadsnp4[paste0('Z_recalculated_in_',trait2)] < 0,
                              'Yes','No'))

trait1 और trait2 स्ट्रिंग वेरिएबल (trait1='DEP', trait2='BMI') हैं।

लेकिन यह मुझे दो की सूची दे रहा है:

> str(leadsnp4$ConcordEffect)
 chr [1:43, 1] "No" "Yes" "No" "Yes" "No" "Yes" "No" "No" "No" "Yes" "Yes" "No" "No" "Yes" "Yes" "Yes" "No" "No" "Yes" "No" "No" ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:43] "5" "10" "23" "31" ...
  ..$ : chr "Z_recalculated_in_DEP"

मैं यहाँ क्या गलत कर रहा हूँ? कोई सहायता चाहिए?

r
-1
zillur rahman 26 अगस्त 2021, 15:20

1 उत्तर

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

डेटाफ़्रेम को सबसेट करने के लिए [[ का उपयोग करें। [ का उपयोग करके एक डेटाफ़्रेम वापस लौटाता है।

इस मुद्दे को प्रदर्शित करने के लिए यहां एक सरल प्रतिलिपि प्रस्तुत करने योग्य उदाहरण दिया गया है।

आपके पास यही है -

df <- head(mtcars)
col <- 'cyl'
df$res <- ifelse(df[col] ==6, 'yes', 'no')
str(df$res)

#chr [1:6, 1] "yes" "yes" "no" "yes" "no" "yes"
# - attr(*, "dimnames")=List of 2
#  ..$ : chr [1:6] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" "Hornet 4 Drive" #...
#  ..$ : chr "cyl"

समाधान -

df <- head(mtcars)
col <- 'cyl'
df$res <- ifelse(df[[col]] ==6, 'yes', 'no')
str(df$res)
#chr [1:6] "yes" "yes" "no" "yes" "no" "yes"
1
Ronak Shah 26 अगस्त 2021, 15:28