2012-08-17 70 views
1

我在按名稱引用數據框中的列時遇到問題。我已經開始提取沒有NA的行的功能:引用R數據框中的列

prepare <- function(dataframe, attr1,attr2){ 
subset_na_still_there <- dataframe[!is.na(attr1) & !is.na(attr2),] 
subset_na_still_there2 <- subset(dataframe, !is.na(attr1) & !is.na(attr2)) 
### someother code goes here 
} 

但是,返回的子集仍然包含NA。我沒有得到任何錯誤。 這裏是一個related question

編輯: 選擇列,然後按編號引用它們開了竅:

prepare <- function(dataframe, attr1,attr2){ 
subset_cols <- dataframe[,c(attr1, attr2)] 
subset_gone <- subset_cols[!is.na(subset_cols[,1]) & !is.na(subset_cols[,2]),] 
} 

爲什麼第一個版本不會達到預期效果?

回答

3

如何:

prepare <- function(x, attr1, attr2){ 
    x[!is.na(x[attr1]) & !is.na(x[attr2]),] 
} 
+0

是的,這是它! – Ivana 2012-08-17 11:39:37

1

而不是創建自己的功能,嘗試subset

subset(mydata, !is.na(attr1) & !is.na(attr2)) 

如果你想獲得與港定居在擺脫行的任何領域嘗試

na.omit(mydata) 
+0

我使用的是在第二行的子功能,問題不在於is.na(),但與列引用。 – Ivana 2012-08-17 10:02:45

1
df <- data.frame(att1=c(1,NA,NA,10),att2=c(NA,1,2,3),val=c("a","z","e","r")) 

df 
    att1 att2 val 
1 1 NA a 
2 NA 1 z 
3 NA 2 e 
4 10 3 r 

test <- function(df,att1,att2){ 
df_no_na <- df[!is.na(att1) & !is.na(att2),] 
df_no_na 
} 

test(df,df$att1,df$att2) 
    att1 att2 val 
4 10 3 r 

這是工作我。你確定NA嗎?是is.na(df$att1)還是TRUE

+0

我懷疑OP可能一直在嘗試調用函數prepare(mydf,「att1」,「att2」)'。只是猜測! – seancarmody 2012-08-17 10:02:48

+0

是的,我承認。但我得到一個「對象」att2'未找到「如果我不。我希望傳遞一個名字,而不是一個專欄。 – Ivana 2012-08-17 10:09:35

+0

作爲一個旁註,如果我要傳遞一個引用屬性而不是屬性的名稱,是否有任何名稱來獲取函數內部的名稱? plotHist < - 函數(屬性){hist(屬性,主=貓(屬性))} – Ivana 2012-09-10 11:42:09