复制前一行R中的行的值

时间:2016-08-31 10:36:19

标签: r copy dataset row

我有一个大数据集 df ;它的简短版本如下:

Time    Block   Accuracy
6087.8  Run2    NA
633.2   Run2    NA
547     Run2    incorrect
135.2   Run2    NA
6217.6  Run2    NA
175.2   Run2    NA
179     Run2    incorrect

我想在df $ Accuracy的上一行中复制值不正确的,所以它看起来像这样:

Time    Block   Accuracy
6087.8  Run2    NA
633.2   Run2    incorrect
547     Run2    incorrect
135.2   Run2    NA
6217.6  Run2    NA
175.2   Run2    incorrect
179     Run2    incorrect

最有效的方法是什么?

2 个答案:

答案 0 :(得分:1)

要查看将受影响的行,请运行:

which(df$Accuracy == "incorrect")-1 

which()返回对于特定布尔语句为true的向量元素(在这种情况下,Accuracy的值等于不正确)。然后我们从向量中的每个值减1,得到前面的行位置。

然后我们可以修改它们:

df[which(df$Accuracy == "incorrect")-1, "Accuracy"] <- "incorrect"

这会查找上面的所有行,并说:对于那些行和列&#34; Accuracy&#34;,将值替换为&#34;不正确&#34;。

答案 1 :(得分:0)

您可以在每个"incorrect"下方创建值,而不是硬编码NA

na_bool = is.na(df$Accuracy)
df[na_bool,]$Accuracy = df[c(FALSE,na_bool[-length(na_bool)]),]$Accuracy