1

データフレーム内の列を名前で参照するのに問題があります。私が持っている関数は、NAが存在しない行を抽出することから始まります。

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が含まれます。エラーは発生しません。これが関連する質問です

編集:列を選択してから番号で参照すると、トリックが実行されます。

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]),]
}

最初のバージョンが期待どおりに機能しないのはなぜですか?

4

3 に答える 3

3

これはどう:

prepare <- function(x, attr1, attr2){
  x[!is.na(x[attr1]) & !is.na(x[attr2]),]
}
于 2012-08-17T10:26:09.903 に答える
1

独自の関数を作成するのではなく、次のことを試してくださいsubset

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

任意のフィールドにNAがある行を削除したい場合は、

na.omit(mydata)
于 2012-08-17T09:49:30.377 に答える
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

于 2012-08-17T09:57:31.080 に答える