2013-04-11 16 views
12

मैं अपने dataframe में "NA" के साथ एक नया स्तंभ जोड़ना चाहते हैं एक नया स्तंभ जोड़ें:अन्य dataframe स्तंभों के बीच

 A  B 
1 14379 32094 
2 151884 174367 
3 438422 449382 

लेकिन मैं इसे col के बीच स्थित होने की जरूरत है। ए और बी, इस तरह:

 A  C  B 
1 14379 NA 32094 
2 151884 NA 174367 
3 438422 NA 449382 

मुझे पता है कि कोल को कैसे जोड़ना है। सी के बाद सी। बी, लेकिन यह मेरे लिए सहायक नहीं है ... कोई भी जानता है कि यह कैसे करें?

उत्तर

23

2 चरणों में, आप स्तंभों को पुन: व्यवस्थित कर सकते हैं:

dat$C <- NA 
dat <- dat[, c("A", "C", "B")] 
     A C   B 
1 0.596068 NA -0.7783724 
2 -1.464656 NA -0.8425972 

तुम भी append

dat <- data.frame(A = rnorm(2), B = rnorm(2)) 
as.data.frame(append(dat, list(C = NA), after = 1)) 

      A C   B 
1 -0.7046408 NA 0.2117638 
2 0.8402680 NA -2.0109721 
5

उपयोग कर सकते हैं, तो आप data.table का उपयोग आप समारोह setcolorder उपयोग कर सकते हैं। ध्यान दें कि NA यदि आप स्तंभ एक पूर्णांक, डबल या चरित्र स्तंभ के रूप में शुरू करना चाहते हैं, तो आप NA_integer, NA_real_ या NA_character_

उपयोग कर सकते हैं तार्किक चर के रूप में संग्रहीत किया जाता है, जैसे

library(data.table) 
DT <- data.table(DF) 
# add column `C` = NA 

DT[, C := NA] 

setcolorder(DT, c('A','C','B')) 
DT 
##   A C  B 
## 1: 14379 NA 32094 
## 2: 151884 NA 174367 
## 3: 438422 NA 449382 

आप ऐसा कर सकता है एक पंक्ति में

setcolorder(DT[, C: = NA], c('A','B','C')) 
1

मैंने कॉलम को (डेटा) में जोड़ने के लिए एक फ़ंक्शन लिखा था। यह आप स्तंभ नाम के लिए की भी अनुमति देता है, और कुछ चेकों है ...

append_col <- function(x, cols, after=length(x)) { 
    x <- as.data.frame(x) 
    if (is.character(after)) { 
     ind <- which(colnames(x) == after) 
     if (any(is.null(ind))) stop(after, "not found in colnames(x)\n") 
    } else if (is.numeric(after)) { 
     ind <- after 
    } 
    stopifnot(all(ind <= ncol(x))) 
    cbind(x, cols)[, append(1:ncol(x), ncol(x) + 1:length(cols), after=ind)] 
} 

उदाहरण:

# create data 
df <- data.frame("a"=1:5, "b"=6:10) 

# append column 
append_col(df, list(c=1:5)) 

# append after an column index 
append_col(df, list(c=1:5), after=1) 

# or after a named column 
append_col(df, list(c=1:5), after="a") 

# multiple columns/single values work as expected 
append_col(df, list(c=NA, d=4:8), after=1) 

(एक समारोह के अंत में cbind बुला का लाभ और अनुक्रमण कि है data.frame भीतर पात्रों के रूप में कारकों को मजबूर नहीं कर रहे हैं होता मामले as.data.frame(append(x, cols, after=ind)) का उपयोग करके)

3

तुम भी पैकेज Tibble, (कई अन्य के बीच में एक बहुत ही दिलचस्प समारोह है) उस के लिए उपयोग कर सकते हैं हो सकता है: add_column()

library(tibble) 
df <- data.frame("a" = 1:5, "b" = 6:10) 
add_column(df, c = rep(NA, nrow(df)), .after = 1) 

वह फ़ंक्शन उपयोग करना आसान है, और आप इसके बजाय तर्क का उपयोग कर सकते हैं।

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