首页 > 解决方案 > 将 NA 分配到 R 中的数据帧中

问题描述

我一直在尝试使用 for 循环来分配 NA,但是没有用,我知道有可能最简单的方法来做到这一点。

我想创建一个额外的列(就像示例中名为 Desire_Output 的列一样),我将在其中将 NA 分配给 Value 列中数字大于 1 的任何行。此外,我想将 NA 分配给下一个两行。如果 Value 列中有 NA,只需将 NA 也放入所需的输出列中。

这是示例:

Event<- c(1,2,2,2,2,2,2,3,3,4,4,4,4,4,5,6,6,6,7)
Value<- c(5,3,0,0,0,2,0,1,10,0,0,NA,NA,NA,1,0,8,0,0)
Desire_output<- c(NA,NA,NA,NA,0,NA,NA,NA,NA,NA,NA,NA,NA,NA,1,0,NA,NA,NA)
A<- data.frame(Event,Value,Desire_output)


   Event Value Desire_output
1      1     5            NA
2      2     3            NA
3      2     0            NA
4      2     0            NA
5      2     0             0
6      2     2            NA
7      2     0            NA
8      3     1            NA
9      3    10            NA
10     4     0            NA
11     4     0            NA
12     4    NA            NA
13     4    NA            NA
14     4    NA            NA
15     5     1             1
16     6     0             0
17     6     8            NA
18     6     0            NA
19     7     0            NA

这是我试图做的,但是当我在 Value 列中找到 NA 时,我开始遇到一些麻烦。

for (f in 1:(nrow(A)-1)){
  if(A$Value2[f] > 1){
    A$Value2[f]<- NA
    A$Value2[f+1]<- NA
    A$Value[f+2]<- NA
     }else{
  }
}

如果您有使用其他任何方法的最简单方法,请告诉我。

标签: rdataframefor-loopif-statementdplyr

解决方案


您可以使用 ifelse。在下面的代码中,我在 ifelse 代码中使用了 OR 语句。

A$Desire_output<- ifelse(A$Value>1 | is.na(A$Value), NA, A$Value)

我希望这将有所帮助。


推荐阅读