2015-04-11 9 views
6

मेरे पास आर में डेटा फ्रेम में एक पंक्ति जोड़ने का एक आसान काम है लेकिन मैं बस यह नहीं कर सकता!आर: एकाधिक कक्षाओं के साथ डेटाफ्रेम में पंक्ति जोड़ना

मेरे पास 50 पंक्तियों और 100 कॉलम के साथ एक डेटा फ्रेम है। डेटा फ्रेम, जिसे मैं एक ही प्रारूप में रखना चाहता हूं, में पहला स्तंभ एक कारक के रूप में होता है, और अन्य सभी कॉलम वर्णों के रूप में होते हैं - यह वही है जो लापरवाही से उत्पन्न होता है। मैं बस 51 वें पंक्ति जोड़ना चाहता हूं ... लेकिन मुझे हर बार चेतावनियां होती हैं।

मेरा जोड़ा गया डेटा Cat <- c("Cat", 1,NA,3,NA,5) रूप का है। (मैं कोई सुराग नहीं है जहां की है। - "हर बार" या 'जाने की जरूरत है! आर के लिए काफी नया)

rbind चलता "अवैध कारक स्तरों

जैसे df <- rbind(df,Cat)

मेरा मानना ​​है कि इस वजह से है ।। कारक/चरित्र विभाजन

+0

तो यकीन है कि वे एक ही कारक स्तर है बनाने के लिए और कोशिश फिर से 'rbind'। – A5C1D2H2I1M1N2O1R2T1

+0

इसके अलावा, यदि यह केवल एक पंक्ति के लिए है, तो आप 'c' के बजाय 'सूची' के साथ बेहतर प्रदर्शन करेंगे। – A5C1D2H2I1M1N2O1R2T1

उत्तर

4

में अपने data.frame भी प्रासंगिक कारक स्तंभ के लिए अपने "कैट" वस्तु में मान होने चाहिए कारक स्तरों

यहाँ एक सरल उदाहरण है:

df <- data.frame(v1 = c("a", "b"), v2 = 1:2) 
toAdd <- list("c", 3) 

## Warnings... 
rbind(df, toAdd) 
#  v1 v2 
# 1 a 1 
# 2 b 2 
# 3 <NA> 3 
# Warning message: 
# In `[<-.factor`(`*tmp*`, ri, value = "c") : 
# invalid factor level, NA generated 

## Possible fix 
df$v1 <- factor(df$v1, unique(c(levels(df$v1), toAdd[[1]]))) 
rbind(df, toAdd) 
# v1 v2 
# 1 a 1 
# 2 b 2 
# 3 c 3 

वैकल्पिक रूप से, "data.table" से rbindlist विचार करें, जिससे आप कारक स्तरों कन्वर्ट करने के लिए होने से बचाने के लिए करना चाहिए:

> library(data.table) 
> df <- data.frame(v1 = c("a", "b"), v2 = 1:2) 
> rbindlist(list(df, toAdd)) 
    v1 v2 
1: a 1 
2: b 2 
3: c 3 
> str(.Last.value) 
Classes ‘data.table’ and 'data.frame': 3 obs. of 2 variables: 
$ v1: Factor w/ 3 levels "a","b","c": 1 2 3 
$ v2: num 1 2 3 
- attr(*, ".internal.selfref")=<externalptr> 
संबंधित मुद्दे