将列中的所有非 NA 设置为 1

Set all non-NAs in column to 1

您好,我正在尝试将我数据集中的一列中的所有非 NA 值设置为 1。这是一些示例数据:

structure(list(ID = c(1, 1, 1, 1, 2, 3, 4, 4), match = structure(c(NA, 
10227, 10227, 10957, NA, 11323, NA, 11323), class = "Date"), 
actual.date = structure(c(10135, 10258, 11808, 11808, 10773, 
13027, 13269, 12086), class = "Date")), .Names = c("ID", 
"match", "actual.date"), row.names = c(NA, -8L), class = "data.frame")

  ID      match actual.date
1  1       <NA>  1997-10-01
2  1 1998-01-01  1998-02-01
3  1 1998-01-01  2002-05-01
4  1 2000-01-01  2002-05-01
5  2       <NA>  1999-07-01
6  3 2001-01-01  2005-09-01
7  4       <NA>  2006-05-01
8  4 2001-01-01  2003-02-03

对于 'match' 列,我想将所有非 NA 设置为 1。

通常您会使用 dat$match[!is.na(dat$match)] <- 1 之类的东西,但这会导致日期列中出现错误。您可以改为使用 ifelse:

dat$match <- ifelse(is.na(dat$match), NA, 1)
dat
#   ID match actual.date
# 1  1    NA  1997-10-01
# 2  1     1  1998-02-01
# 3  1     1  2002-05-01
# 4  1     1  2002-05-01
# 5  2    NA  1999-07-01
# 6  3     1  2005-09-01
# 7  4    NA  2006-05-01
# 8  4     1  2003-02-03

如果你想制作一个二进制列(正如你在原始问题下的评论中所建议的那样),你可以简单地这样做:

dat$match <- !is.na(dat$match)
dat
#   ID match actual.date
# 1  1 FALSE  1997-10-01
# 2  1  TRUE  1998-02-01
# 3  1  TRUE  2002-05-01
# 4  1  TRUE  2002-05-01
# 5  2 FALSE  1999-07-01
# 6  3  TRUE  2005-09-01
# 7  4 FALSE  2006-05-01
# 8  4  TRUE  2003-02-03