将大于索引的值设置为每行NA

The*_*aly 4 r

在R中,我有一个矩阵df和向量invalidAfterIndex.对于i第i行,我想设置与指数大于所有元素invalidAfterIndex[i]NA.例如:

> df <- data.frame(matrix(rnorm(20), nrow=5))
> df
            X1         X2         X3          X4
1  2.124042819 -0.2862224  0.1686977  2.14838198
2  0.777763004  0.2949123 -0.4331421 -0.81278586
3 -0.003226624 -0.2326152 -1.5779695 -1.23193913
4  0.165975919 -0.1879981 -0.8214994 -1.40267202
5  1.299195865 -0.9418217 -1.5302512  0.03164781
> invalidAfterIndex <- c(2,3,1,4,1)
Run Code Online (Sandbox Code Playgroud)

我想拥有:

            X1         X2         X3          X4
1  2.124042819 -0.2862224  NA         NA
2  0.777763004  0.2949123 -0.4331421  NA
3 -0.003226624  NA         NA         NA
4  0.165975919 -0.1879981 -0.8214994 -1.40267202
5  1.299195865  NA         NA         NA
Run Code Online (Sandbox Code Playgroud)

如果没有for循环,我怎么能这样做?

Fra*_*ank 6

你可以做

is.na(df) <- col(df) > invalidAfterIndex
Run Code Online (Sandbox Code Playgroud)

或者,正如@digEmAll建议的那样

df[col(df) > invalidAfterIndex] <- NA
Run Code Online (Sandbox Code Playgroud)