2015-09-01 136 views
0

更多的'感覺應該是'簡單的東西,這似乎正在逃避我今天。預先感謝您的幫助。R:將數據框添加到基於公式的數據框列表

在一個循環內,這是一個函數,我試圖添加一個列,並根據公式命名。

我可以綁定一個列&其名稱是從綁定對象採取:data<-cbind(data,bothdata)

我可結合柱&手動命名綁定對象:data<-cbind(data,newname=bothdata)

我可以結合一列這是產品方程的&手動命名綁定對象:data<-cbind(data,newname2=bothdata-1)

或者另一種方式:data <- transform(data, newColumn = bothdata-1)

我不能做的是名稱是公式的產物。我的實際公式導出的示例名稱爲paste("E_wgt",rev(which(rev(Esteps) == q))-1,"%") &等式爲列:baddata - q

更簡單的一個:data<-cbind(data,paste("magic",100,"beans")=bothdata-1)。這是因爲cbind不希望=,即使它在前面的示例中沒有問題。 transform也一樣失敗。

我首先想到的是assign,但同時我用這個成功創建forumla命名的對象,我看不出如何讓它式命名工作。

如果我使用一箇中間步驟把命名式中的對象容器,然後使用該,例如:

name <- paste("magic",100,"beans") 
data<-cbind(data,name=bothdata-1) 

列名是「名稱」不是「magic100beans」。如果我assign公式結果的公式命名對象:

assign(paste("magic",100,"beans"),bothdata-1) 

然後嘗試cbind經由get

data<-cbind(data,get(paste("magic",100,"beans"))) 

列被稱爲 「弄(粘貼(」 魔法」,100, 「豆」))」。噓!任何想法的人?在我看來,我可以做cbind然後單獨colnames(data)[ncol(data)] <- paste("magic",100,"beans")),我想我現在會解決,但仍然有興趣找到是否有直接的方法。

謝謝。

+1

這可能會幫助你知道'data $ col1'與'data [,「col1」]'相同,如果'x'是'「col1」',它與'data [,x]'相同。這是我通常以編程方式訪問/設置列的方式。 –

+0

另一種方法是使用'setNames'或'''名稱< - \''設置名稱。 –

+0

謝謝安託萬。我仍然不知道如何使用[,x]而不是$ x來設置名稱... –

回答

2

機會是cbind是你的用例矯枉過正。在幾乎所有情況下,您都可以使用data$newname2 <- data$bothdata - 1簡單地更改基礎數據框。

如果列的名稱是動態的,您可以使用[[運算符 - data[["newcol"]] <- data$newname + 1來引用它。其他提示和用法見?'['?'[.data.frame'

編輯:成立@馬立克的建議爲[["newcol"]],而不是[, "newcol"]

+0

這是門票,謝謝用戶。我忘了將數據分配給df中不存在的[,列]將其放入具有該名稱的新列中。乾杯! :) –

+0

data [[「newcol」]] < - data $ newname + 1'是創建新列的更簡潔方法 – Marek

2

它可以幫助你知道data$col1data[,"col1"]一樣是相同的比data[,x]如果x是所有「col1」。這是我通常以編程方式訪問/設置列的方式。

所以這應該工作:

name <- paste("magic",100,"beans") 
data[,name] <- obsdata-1 

注意,您不必使用臨時變量name。這相當於:

data$magic100beans <- obsdata-1 

本身相當於一個data.frame,到:

data<-cbind(data, magic100beans=bothdata-1) 

只要你知道,你也可以將它的名字算賬:

old_names <- names(data) 
name <- paste("magic",100,"beans") 

data <- cbind(data, bothdata-1) 

data <- setNames(data, c(old_names, name)) 
# or 
names(data) <- c(old_names, name) 
+0

謝謝Antoine。之後我使用colnames設置,但[,newname]是我所需要的。乾杯! –

相關問題