2014-09-10 42 views
1

就拿這個例子中數據幀數據框填充與NA在選定列的選擇列不存在

temp <- data.frame('a' = 1:3, 'b' = 4:6, 'd' = 7:9) 

我想子集使用列名的矢量這個數據幀,但是如果向量包含任何列在數據框中不存在我希望它們仍然被返回,但是作爲NA。

所以,如果我的載體是

colVec <- c('a', 'b', 'c') 

我想運行沿

subset(temp, select = colVec) 

線的東西拿到

a b c 
1 4 NA 
2 5 NA 
3 6 NA 
+0

只是做'臨時[,colVec [colVec%的%名字(臨時)]]'如果你真的想添加'NA'列(**爲什麼?**),然後使用'!'附加帶有缺席列名稱的'NA'。 – 2014-09-10 16:43:06

回答

4

您可以分兩步做到這一點 - - 限制數據框中的請求列,然後添加不在數據中的請求的列RAME。您可以使用intersectsetdiff讓這兩組列名的:

temp2 <- temp[intersect(colVec, names(temp))] 
temp2[setdiff(colVec, names(temp))] <- NA 
temp2 
# a b c 
# 1 1 4 NA 
# 2 2 5 NA 
# 3 3 6 NA