r,为我的一列中与NA对应的b列中的每一行指定一个NA值

时间:2017-06-02 09:02:40

标签: r dataframe na

我正在尝试为我的列中与NA对应的b列中的每一行分配一个NA值。 列位于数据框df。

但是,当我执行以下代码时,我的所有b列都会获得NA。

我应该改变什么?

  for(i in 1:nrow(df)) 
{
  row <- df[i,]
  is.na(df$`a`) <- (df$b  <- NA)
}

2 个答案:

答案 0 :(得分:1)

为此,我们可以通过创建逻辑vectoris.na(df$a))来使用向量化选项,使用它来对“b”的元素进行子集并将其分配给NA < / p>

 df$b[is.na(df$a)] <- NA

如果我们使用的是data.table,则可以将其分配(:=

library(data.table)
setDT(df)[is.na(a), b := NA]

答案 1 :(得分:0)

根据文档public static final String TABLE_NAME = "stopwatch"; //make a table with name public static final String COL_1 = "ID"; //make an ID for every colomn public static final String COL_2 = "times"; //make a 2nd colomn for data public static final String COL_3= "date"; public DatabaseHelper(Context context) { super(context, TABLE_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { //make the onCreate method that takes the database as input String createTable = "CREATE TABLE " + TABLE_NAME + " ( " + COL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_2 +" TEXT" + COL_3 +" TEXT)"; //create the table with SQL statements to input the data correctly db.execSQL(createTable); //input the SQL statements in the DB } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //make upgrade method that takes the database and the versions db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME); //execute SQL statements drop table and which one onCreate(db); //run through create method } ?is.na是一个泛型函数,它将元素设置为is.na<- 。对于NA的右侧,is.na(x) <- value需要一个合适的索引向量,以便与x 一起使用。

示例:

value

因此,向量df <- data.frame(a = LETTERS[1:5], b = 1:5) is.na(df$b) <- c(2, 4) df # a b #1 A 1 #2 B NA #3 C 3 #4 D NA #5 E 5 的第2和第4个元素已设置为df$b

现在,如果NA的相应元素也应设置为df$a,我们可以使用:

NA

注意:我已经从Why does is.na() change its argument?

的答案和评论中了解到这一功能