R 想要检测>=在大型数据集的每一行中有8个非NA的连续元素(即is.NA()==FALSE)

R 想要检测>=在大型数据集的每一行中有8个非NA的连续元素(即is.NA()==FALSE),r,R,我有200个数据集,大小为5120*732。其中一些元素是NA 现在,在每一行中,一旦它们是>=N1(N1=8)个不是NA的连续元素(即is.NA()==FALSE),我想在它们前面加上“D” 下面是一个N1=3的示例 df1 <- data.frame(c(1.0,NA,1.1,1.2,1.3), c(2.0,2.1,NA,NA,NA), c(3.0,3.1,3.2,3.3,NA),

我有200个数据集,大小为5120*732。其中一些元素是NA

现在,在每一行中,一旦它们是>=N1(N1=8)个不是NA的连续元素(即is.NA()==FALSE),我想在它们前面加上“D”

下面是一个N1=3的示例

df1 <- data.frame(c(1.0,NA,1.1,1.2,1.3),
                  c(2.0,2.1,NA,NA,NA),
                  c(3.0,3.1,3.2,3.3,NA),
                  c(4.0,4.1,4.2,4.3,4.4),
                  c(5.0,NA,5.1,NA,5.2))

df1这里有一个基本的R解决方案,您可以尝试

N1 <- 3
df1_expected <- data.frame(t(apply(df1, 1, function(v) {
  r <- rle(!is.na(v))
  idx <- rep(r$lengths >=N1 & r$values,r$lengths)
  replace(v,which(idx),paste0("D",v[idx]))
})))

N1这里有一个基本的R解决方案,你可以试试

N1 <- 3
df1_expected <- data.frame(t(apply(df1, 1, function(v) {
  r <- rle(!is.na(v))
  idx <- rep(r$lengths >=N1 & r$values,r$lengths)
  replace(v,which(idx),paste0("D",v[idx]))
})))

N1基本上,您希望查看前三行(上面),并在非
NA
的值前面放置
D
?还有为什么
D1.0
列没有
D1.1
而列
D5.0
D5.1
?@akash87你好,akash87,我想检查每一行。例如,在第一行(在示例“df1”中),有5个连续的元素不是
NA
,因此我用
D
作为它们的前缀。在第二行,
2.1 3.1 4.1
是连续的,有3个(即>=N1)连续的元素,所以我给它们加前缀。在第三行中,
3.2 4.2 5.1
是连续的。在第四行中,
3.3 4.3
是连续的,但2基本上您希望查看前三行(上面),并将
D
放在不是
NA
的值前面。另外,为什么
D1.0
列没有
D1.1
而不是列
D5.0
D5.1
?@akash87您好,我想检查每一行。例如,在第一行(在示例“df1”中),有5个连续的元素不是
NA
,因此我用
D
作为它们的前缀。在第二行,
2.1 3.1 4.1
是连续的,有3个(即>=N1)连续的元素,所以我给它们加前缀。在第三行中,
3.2 4.2 5.1
是连续的。在第4行中,
3.3 4.3
是连续的,但为2
N1 <- 3
df1_expected <- data.frame(t(apply(df1, 1, function(v) {
  r <- rle(!is.na(v))
  idx <- rep(r$lengths >=N1 & r$values,r$lengths)
  replace(v,which(idx),paste0("D",v[idx]))
})))
> df1_expected
    v1   v2   v3   v4   v5
1   D1   D2   D3   D4   D5
2 <NA> D2.1 D3.1 D4.1 <NA>
3  1.1 <NA> D3.2 D4.2 D5.1
4  1.2 <NA>  3.3  4.3 <NA>
5  1.3 <NA> <NA>  4.4  5.2