我试图根据其他列的值的逻辑语句创建一个列ID.例如,在下面的数据帧中

test <- structure(list(time = c(10L, 20L, NA, 30L), type = structure(c(1L, 
2L, 3L, NA), .Label = c("A", "B", "C"), class = "factor"), ID = c(NA, 
"1", NA, NA)), .Names = c("time", "type", "ID"), row.names = c(NA, 
-4L), class = "data.frame")

看起来像

    time    type
1   10      A
2   20      B
3   NA      C
4   30      NA

我想创建一个新的列ID,它的值为1,表示所有time不是NA,所有type不是A.我正在为此使用以下代码:

test$ID <- ifelse(is.na(test$time) | test$type == "A", NA, "1")

结果如下:

    time    type    ID
1   10      A       NA
2   20      B       1
3   NA      C       NA
4   30      NA      NA

但是,该代码忽略了第type列中的NA,导致第ID列中的值为NA.我需要这个值为1,所以我需要的解决方案应该是:

    time    type    ID
1   10      A       NA
2   20      B       1
3   NA      C       NA
4   30      NA      1

谁能告诉我怎么做?如果我能以某种方式将is.na(test$type)的结果改为返回FALSE,而不是TRUE,我就可以在现有代码中使用它,但我不知道该怎么做.或者,也许我现有代码的 struct 需要完全改变?谢谢你的帮助!

推荐答案

你无法将NA与另一个值进行比较,所以使用==是行不通的.考虑以下事项:

NA == NA
# [1] NA

您只需将比较从==更改为%in%:

ifelse(is.na(test$time) | test$type %in% "A", NA, "1")
# [1] NA  "1" NA  "1"

关于你的另一个问题,

如果我能以某种方式将is.na(test$type)的结果改为返回FALSE,而不是TRUE,我就可以在现有代码中使用它,但我不知道该怎么做.

只需使用!来否定结果:

!is.na(test$time)
# [1]  TRUE  TRUE FALSE  TRUE

R相关问答推荐

仅在ggplot的每个方面绘制最丰富的物种

手工PCA上的载体与输出双图不匹配

导入到固定列宽的R中时出现问题

提取rame中对应r中某个变量的n个最小正值和n个最大负值的条目

使用scale_x_continuous复制ggplot 2中的离散x轴

在边界外添加注释或标题

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

R Tidymodels textercipes-使用spacyR进行标记化-如何从生成的标记列表中删除标点符号

RStudio中相关数据的分组箱形图

如何在R中合并两个基准点?

如何在geom_col中反转条

Ggplot2中的重复注记

将小数分隔符放在R中的前两位数字之后

如何在R库GoogleDrive中完全删除预先授权的Google帐户?

以NA为通配符的R中的FULL_JOIN以匹配其他数据中的任何值.Frame

如何使用同比折线图中的个别日

R中Gamma回归模型均方误差的两种计算方法不一致

我需要使用ggplot2制作堆叠条形图

使用&Fill&Quot;在gglot中创建 colored颜色 渐变

使用其他DF中的文件名将列表中的每个元素保存到文件中