मेरे पास प्रति पंक्ति एक मान है, संभावित रूप से कई स्तंभों में से एक में। मैं एक एकल कॉलम कैसे बना सकता हूं जिसमें कॉलम नंबर 1 है? मैं इसे dplyr का उपयोग करके करना चाहता हूं, लेकिन एकमात्र तरीके मैं लूप के लिए शामिल होने के बारे में सोच सकता हूं, जो लगता है कि आर पसंद नहीं है।

df<-data.frame(
  a=c(1,0,0,0),
  b=c(0,1,1,0),
  c=c(0,0,0,1)
)

  a b c
1 1 0 0
2 0 1 0
3 0 1 0
4 0 0 1

लक्ष्य:

1 1
2 2
3 2
4 3
2
Rilcon42 26 नवम्बर 2015, 04:43

3 जवाब

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

यहां dplyr की कोई आवश्यकता नहीं है। यह max.col() के लिए है। चूंकि पंक्ति के अन्य सभी मूल्य शून्य होंगे, फिर max.col() हमें कॉलम नंबर देगा जहां 1 दिखाई देता है।

max.col(df)
# [1] 1 2 2 3

यदि आपको एक कॉलम की आवश्यकता है, तो

data.frame(x = max.col(df))
#   x
# 1 1
# 2 2
# 3 2
# 4 3

या cbind() या matrix() एक मैट्रिक्स के लिए।

6
Rich Scriven 26 नवम्बर 2015, 01:54

हम भी कर सकते थे

as.matrix(df) %*%seq_along(df)
#     [,1]
#[1,]    1
#[2,]    2
#[3,]    2
#[4,]    3
1
akrun 26 नवम्बर 2015, 03:06
which(df==1, arr.ind=T)
#      row col
# [1,]   1   1
# [2,]   2   2
# [3,]   3   2
# [4,]   4   3
0
Ven Yao 1 पद 2015, 07:18