मेरे पास एकाधिक कॉलम का डेटा फ्रेम है। मैं निम्नानुसार शर्तों के आधार पर एक नया कॉलम बनाना चाहता हूं:
यदि दोनों कोला और 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"
मैं यहाँ क्या गलत कर रहा हूँ? कोई सहायता चाहिए?
-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