2015-06-06 11 views
5

पर आधारित अतिरिक्त कॉलम मेरे पास युग्मित डेटा (उसी घर के सदस्य) के साथ एक डेटासेट है।जोड़ा गया डेटा (उत्परिवर्तन)

ईद व्यक्तिगत पहचानकर्ता है और householdid साथी (और इसके विपरीत) के पहचानकर्ता है।

मुझे अपने साथी के प्रत्येक आईडी के लिए अतिरिक्त कॉलम (व्यवसाय) जोड़ने की आवश्यकता है।

मेरे डेटा इस

dta = rbind(c(1013661,101366, 'Never worked'), 
    c(1013662, 101366, 'Intermediate occs'), 
    c(1037552, 103755, 'Managerial & professional occs'), 
    c(1037551, 103755, 'Intermediate occs') 
) 

colnames(dta) = c('idno', 'householdid', 'occup') 
dta 

idno  householdid occup       
"1013661" "101366" "Never worked"     
"1013662" "101366" "Intermediate occs"    
"1037552" "103755" "Managerial & professional occs" 
"1037551" "103755" "Intermediate occs" 

क्या मैं इस

idno  householdid occup       occupPartner      
"1013661" "101366" "Never worked"     "Intermediate occs"    
"1013662" "101366" "Intermediate occs"    "Never worked"     
"1037552" "103755" "Managerial & professional occs" "Intermediate occs"    
"1037551" "103755" "Intermediate occs"    "Managerial & professional occs" 

मुझे लगता है कि वहाँ में बदलें के साथ एक समाधान है की तरह दिखना चाहिए की जरूरत है की तरह लग रहे है, लेकिन मुझे यकीन है कि क्या group_by होना चाहिए नहीं कर रहा हूँ।

कोई विचार?

उत्तर

8

library(dplyr) 
dta1 <- as.data.frame(dta) %>% 
      group_by(householdid) %>% 
      mutate(occupPartner= rev(occup)) 
as.data.frame(dta1) 
#  idno householdid       occup 
#1 1013661  101366     Never worked 
#2 1013662  101366    Intermediate occs 
#3 1037552  103755 Managerial & professional occs 
#4 1037551  103755    Intermediate occs 
#     occupPartner 
#1    Intermediate occs 
#2     Never worked 
#3    Intermediate occs 
#4 Managerial & professional occs 

प्रयास करें डेटा पहले ही आदेश दिया गया है, तो

indx <- c(rbind(seq(2, nrow(dta), by=2), seq(1, nrow(dta), by=2))) 
cbind(dta, occupPartner=dta[,3][indx]) 
+1

प्रतिभाशाली प्रतिभाशाली प्रतिभाशाली – giacomo

+1

@giacomoV पता चला है कि यह आप के लिए काम किया है खुशी । – akrun

2

एक अन्य विकल्प का उपयोग कर data.table

library(data.table) 
out = as.data.table(dta)[, occupPartner := rev(occup), by = householdid] 

#> out 
#  idno householdid       occup 
#1: 1013661  101366     Never worked 
#2: 1013662  101366    Intermediate occs 
#3: 1037552  103755 Managerial & professional occs 
#4: 1037551  103755    Intermediate occs 
#      occupPartner 
#1:    Intermediate occs 
#2:     Never worked 
#3:    Intermediate occs 
#4: Managerial & professional occs 
+0

यदि आप 'data.table' का उपयोग करना चाहते हैं, तो' setDT() 'का उपयोग करके 'as.data.table()' का उपयोग करके अनावश्यक रूप से डेटा की प्रतिलिपि बनाने की तुलना में एक अच्छा विकल्प है। – Arun

+1

असल में मैंने 'as.data.table()' का उपयोग किया क्योंकि इनपुट डेटा एक मैट्रिक्स है। –

+0

वूप्स .. ठीक है, पूरी तरह से याद किया। – Arun

संबंधित मुद्दे