2012-09-12 155 views
20

我有這個示例代碼來從現有數據框'my_data'創建一個新的數據框'new_data'。變量前面的美元符號

new_data = NULL 
n = 10 #this number correspond to the number of rows in my_data 
conditions = c("Bas_A", "Bas_T", "Oper_A", "Oper_T") # the vector characters correspond to the target column names in my_data 
for (cond in conditions){ 
    for (i in 1:n){ 
     new_data <- rbind(new_data, c(cond, my_data$cond[i])) 
    } 
} 

的問題是,my_data$cond(其中cond是一個變量,而不是列名)是不能接受的。

如何通過在美元符號後使用變量值來調用數據框的列?

+8

'$'並不真正用於編程式使用。它意味着交互式使用的便利。嘗試使用'mydata [i,cond]'來代替。然而,看着你的代碼,我認爲你可能從'reshape'函數或'reshape2'軟件包中獲益...... – James

+0

請注意'my_data'是一個數據。frame'和'new_data'是一個'矩陣'。 – GSee

+3

參見'幸運(312)'。 –

回答

32

要訪問的列,可使用:

my_data[ , cond] 

my_data[[cond]] 

i個行可以與被訪問:

my_data[i, ] 

合併兩組,以獲得所希望的值:

my_data[i, cond] 

my_data[[cond]][i] 
+0

我們不能使用c $ column,其中'c'是一個矩陣?我得到了'c $ col1錯誤:$運算符對原子向量無效...... – Mahesha999

+0

@ Mahesha999您不能在矩陣中使用'$'。 –

3

我猜你需要get()

例如,
get(x,list),其中list是列表和x是變量(可以是一個字符串),其等於list$x

但在get(x,list),x可以是一個變量,而使用$,x不能是一個變量。

0

$適用於列而不是單個列對象。這是一種矢量化形式。代碼

corrections$BookDate = as.Date(corrections$BookDate, format = "%m/%d/%Y") 

從字符串corrections表的BookDate列的內容轉換爲Date對象。它在一個操作中執行它,分配。

執行以下操作,它會解決您的問題:

new_data <- rbind(new_data, c(cond, my_data$cond)) 
0

你會經常要選擇一整列,從數據幀,即一個特定的變量。例如,如果要選擇變徑的所有元素,例如,這兩種方法都有效:

dataframe_name[,column_position] 
dataframe_name[,"column_name"] 

但是,有一個捷徑。如果您的列有名稱,則可以使用$符號:

dataframe_name$column_name