2013-03-18 16 views
11

में एक ही कारक स्तर को एक ही कारक स्तर पर लागू करना मैं एक डेटासेट के साथ काम कर रहा हूं जिसमें 16 प्रश्न शामिल हैं जहां प्रतिक्रिया सेट समान है (हां, नहीं, अज्ञात या गुम है)। मैं आर का उपयोग कर डेटा संसाधित कर रहा हूं और मैं प्रत्येक चर को एक कारक में बदलना चाहता हूं। एक परिवर्तनीय के लिए, मैं निम्नलिखित निर्माण का उपयोग कर सकता हूं:आर डेटा फ्रेम

df <- read.csv("thedata.csv") 
df$q1 <- factor(x=df$q1,levels=c(-9,0,1), 
         labels=c("Unknown or Missing","No","Yes)) 

मैं 16 बार टाइपिंग से बचना चाहता हूं। मैं इसे for() के साथ कर सकता था, लेकिन मैं सोच रहा था कि ऐसा करने के लिए एक स्पष्ट, अधिक आर तरीका है या नहीं। कुछ नमूना डेटा:

structure(list(q1 = c(0, 0, 0, -9, 0), q2 = c(0, 0, 1, 0, 0), 
       q3 = c(0, 0, 1, 0, 0), q4 = c(1, 1, 0, 0, 0), 
       q5 = c(0, 1, 1, 1, 1), q6 = c(1, 1, 1, 0, 0), 
       q7 = c(0, 0, 0, 1, 0), q8 = c(0, 0, 1, 1, 1), 
       q9 = c(1, 0, -9, 1, 0), q10 = c(1, 0, 0, 0, 0), 
       q11 = c(0, 1, 1, 0, 0), q12 = c(1, 1, 0, 0, 0), 
       q13 = c(1, -9, 1, 0, 0), q14 = c(0, 0, 0, 1, 1), 
       q15 = c(1, 0, 1, 1, 0), q16 = c(1, 1, 1, 1, 1)), 
       .Names = c("q1", "q2", "q3", "q4", "q5", "q6", "q7", 
          "q8", "q9", "q10", "q11", "q12", "q13", 
          "q14", "q15", "q16"), 
       row.names = c(NA, -5L), class = "data.frame") 

उत्तर

18
df[] <- lapply(df, factor, 
       levels=c(-9, 0, 1), 
       labels = c("Unknown or Missing", "No", "Yes")) 
str(df) 

तेजी से लागू करें या sapply जो करने के लिए data.frame की जरूरत होने की संभावना का उपयोग करना उन परिणामों को सुधार/पुनः प्राप्त करें। यह चाल यहां है कि असाइनमेंट के एलएचएस पर [] का उपयोग लक्ष्य की संरचना को संरक्षित करता है (क्योंकि आर "जानता है" इसकी कक्षा और आयाम क्या हैं, और की सूची में data.frame की आवश्यकता नहीं है। अगर आप चाहते थे इसे केवल चयनित कॉलम के साथ करने के लिए आप यह कर सकते हैं:

df[colnums] <- lapply(df[colnums], factor, 
       levels=c(-9, 0, 1), 
       labels = c("Unknown or Missing", "No", "Yes")) 
str(df) 
1

एक आर आधार समाधान apply

data.frame(apply(df, 2, factor, 
       levels=c(-9, 0, 1), 
       labels = c("Unknown or Missing", "No", "Yes"))) 

का उपयोग कर sapply

data.frame(sapply(df, factor, levels=c(-9, 0, 1), 
     labels = c("Unknown or Missing", "No", "Yes"))) 
+0

सावधान रहें: लागू करें हमेशा इसके इनपुट को मैट्रिक्स में परिवर्तित करें – hadley

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