R 想要检测>=在大型数据集的每一行中有8个非NA的连续元素(即is.NA()==FALSE)
我有200个数据集,大小为5120*732。其中一些元素是NA 现在,在每一行中,一旦它们是>=N1(N1=8)个不是NA的连续元素(即is.NA()==FALSE),我想在它们前面加上“D” 下面是一个N1=3的示例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),
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