r - cbind संख्या के साथ स्ट्रिंग बदलता है?




vector matrix (2)

cbind() एक matrix देता है जो एक क्लास का होना चाहिए। इस मामले में सब कुछ character में परिवर्तित हो जाता character क्योंकि यह सबसे सामान्य वर्ग है (आप संख्याओं को वर्णों के रूप में व्यक्त कर सकते हैं, लेकिन अन्य तरह से नहीं) विभिन्न वर्गों के कॉलमों को स्टोर करने के लिए data.frame पर निर्भर करता है।

क्या करना चाहते हैं, आप या तो स्पष्ट रूप से एक नया data.frame बना सकते हैं या मौजूदा एक के सबसेट का उपयोग कर सकते हैं:

iris2 <- data.frame(x=iris$Sepal.Width, y=iris$Species)  ## creates new data.frame
iris[, c("Sepal.Width", "Species")   ## returns subset of iris

यदि आप जिस समस्या को हल करने की कोशिश कर रहे हैं, उसे पोस्ट करते हैं, तो आप चाहते हैं कि फ़िल्टर करने के लिए एक अधिक सुव्यवस्थित तरीका हो सकता है।

x = iris$Sepal.Width;
y = iris$Species;

m = cbind(x,y);

मीटर का उत्पादन है:

        x  y
  [1,] 3.5 1
  [2,] 3.0 1
  [3,] 3.2 1
  [4,] 3.1 1
  [5,] 3.6 1
  [6,] 3.9 1

लेकिन मुझे 'सेटोसा' आदि चाहिए, आदि। किसी संख्या के बजाय कॉलम y में

मैं उसे कैसे कर सकता हूँ?

मैं 2 वेक्टरों को जोड़ना चाहता हूं क्योंकि मैं बाद में इसके साथ फ़िल्टर करना चाहता हूं

m[m[,"y"]=="virginica",]

या किसी अन्य चीज को बिना किसी चीज के लिए करना है?


cbind के साथ cbind को cbind , परिणाम एक matrix , जो केवल एक प्रकार के डेटा को पकड़ सकता है। इस प्रकार, "प्रजाति" कारक को उसके अंतर्निहित संख्यात्मक मूल्य से जोड़ लिया जाता है।

इसके बदले cbind.data.frame (या सिर्फ data.frame ) को data.frame अगर आपको अलग-अलग डेटा प्रकार के लिए आपके कॉलम की आवश्यकता हो।

> head(data.frame(x, y))
    x      y
1 3.5 setosa
2 3.0 setosa
3 3.2 setosa
4 3.1 setosa
5 3.6 setosa
6 3.9 setosa
> head(cbind.data.frame(x, y))
    x      y
1 3.5 setosa
2 3.0 setosa
3 3.2 setosa
4 3.1 setosa
5 3.6 setosa
6 3.9 setosa