将列中的所有非 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
您好,我正在尝试将我数据集中的一列中的所有非 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