R 在零之前插入一个空行
一个R 在零之前插入一个空行,r,R,一个dplyr和tidyr可能性可能是: ind = with(aaa, ifelse(x == 0 & seq_along(x) > 1, 2, 1)) d = aaa[rep(1:NROW(aaa), ind), , drop = FALSE] transform(d, x = replace(x, sequence(ind) == 2, NA)) 它不是添加一个空行,因为您有一个数字向量。相反,它添加了一行NA。如果需要一个空行,可以将其转换为字符向量,然后将NA替换为空白
dplyr
和tidyr
可能性可能是:
ind = with(aaa, ifelse(x == 0 & seq_along(x) > 1, 2, 1))
d = aaa[rep(1:NROW(aaa), ind), , drop = FALSE]
transform(d, x = replace(x, sequence(ind) == 2, NA))
它不是添加一个空行,因为您有一个数字向量。相反,它添加了一行NA。如果需要一个空行,可以将其转换为字符向量,然后将NA替换为空白。一个
dplyr
和tidyr
可能性可能是:
ind = with(aaa, ifelse(x == 0 & seq_along(x) > 1, 2, 1))
d = aaa[rep(1:NROW(aaa), ind), , drop = FALSE]
transform(d, x = replace(x, sequence(ind) == 2, NA))
它不是添加一个空行,因为您有一个数字向量。相反,它添加了一行NA。如果您需要一个空行,可以将其转换为字符向量,然后将NA替换为空白。下面我们使用了点,但您可以根据需要将“.”替换为NA或“”或其他内容 1)我们可以使用
Reduce
和append
:
aaa %>%
uncount(ifelse(row_number() > 1 & x == 0, 2, 1)) %>%
mutate(x = ifelse(x == 0 & lag(x == 1, default = first(x)), NA_integer_, x))
x
1 0
2 1
3 1
4 NA
5 0
6 1
7 1
8 1
9 NA
10 0
11 1
12 1
3)我们可以创建一个两行矩阵,其中第一行是0前面的点,否则为NA。然后将其分解为向量,并使用na.omit删除na值
data.frame(x = strsplit(gsub("(.)0", "\\1.0", paste(aaa$x, collapse = "")), "")[[1]])
4)我们可以在aaa$x[-1]上重叠输出c(“.”,9)或1。取消该列表并重新插入aaa$x[1]。没有使用任何软件包
data.frame(x = na.omit(c(rbind(replace(ifelse(aaa$x == 0, ".", NA), 1, NA), aaa$x))))
repl <- function(x) if (!x) c(".", 0) else 1
data.frame(x = c(aaa$x[1], unlist(lapply(aaa$x[-1], repl))))
6)假设aaa
有两列,其中第二列为字符(非因子)。将一行点添加到aaa
,然后使用unlist
和Map
创建索引向量,以访问扩展aaa
的相应行
L <- as.list(aaa$x[-1])
L[x[-1] == 0] <- list(c(".", 0))
data.frame(x = c(aaa$x[1], unlist(L)))
下面我们使用了点,但您可以根据需要将“.”替换为NA或“”或其他内容 1)我们可以使用
Reduce
和append
:
aaa %>%
uncount(ifelse(row_number() > 1 & x == 0, 2, 1)) %>%
mutate(x = ifelse(x == 0 & lag(x == 1, default = first(x)), NA_integer_, x))
x
1 0
2 1
3 1
4 NA
5 0
6 1
7 1
8 1
9 NA
10 0
11 1
12 1
3)我们可以创建一个两行矩阵,其中第一行是0前面的点,否则为NA。然后将其分解为向量,并使用na.omit删除na值
data.frame(x = strsplit(gsub("(.)0", "\\1.0", paste(aaa$x, collapse = "")), "")[[1]])
4)我们可以在aaa$x[-1]上重叠输出c(“.”,9)或1。取消该列表并重新插入aaa$x[1]。没有使用任何软件包
data.frame(x = na.omit(c(rbind(replace(ifelse(aaa$x == 0, ".", NA), 1, NA), aaa$x))))
repl <- function(x) if (!x) c(".", 0) else 1
data.frame(x = c(aaa$x[1], unlist(lapply(aaa$x[-1], repl))))
6)假设aaa
有两列,其中第二列为字符(非因子)。将一行点添加到aaa
,然后使用unlist
和Map
创建索引向量,以访问扩展aaa
的相应行
L <- as.list(aaa$x[-1])
L[x[-1] == 0] <- list(c(".", 0))
data.frame(x = c(aaa$x[1], unlist(L)))
这里有一个带有
rleid
aaa <- data.frame(x = c(0,1,1,0,1,1,1,0,1,1), y = letters[1:10])
nr <- nrow(aaa)
fun <- function(ix, x) if (!is.na(x) & x == 0 & ix > 1) c(nr + 1, ix) else ix
rbind(aaa, c(".", NA))[unlist(Map(fun, 1:nr, aaa$x)), ]
这里有一个带有
rleid
aaa <- data.frame(x = c(0,1,1,0,1,1,1,0,1,1), y = letters[1:10])
nr <- nrow(aaa)
fun <- function(ix, x) if (!is.na(x) & x == 0 & ix > 1) c(nr + 1, ix) else ix
rbind(aaa, c(".", NA))[unlist(Map(fun, 1:nr, aaa$x)), ]
我的解决办法是
data.frame(x = unname(unlist(by(aaa$x,cumsum(aaa==0),c,'.'))))
x
1 0
2 1
3 1
4 .
5 0
6 1
7 1
8 1
9 .
10 0
11 1
12 1
13 .
aaa(1,2,1))
aaa我的解决方案是
data.frame(x = unname(unlist(by(aaa$x,cumsum(aaa==0),c,'.'))))
x
1 0
2 1
3 1
4 .
5 0
6 1
7 1
8 1
9 .
10 0
11 1
12 1
13 .
aaa(1,2,1))
aaa0 1 1 NA 0 1 1 NA 0 1 1如果在此处。是NA,请你给我一个简单的方法,非常感谢。假设显示的向量是输入,那么答案中的备选方案(1)有效。假设y是字符列,而不是因子,我们在这里添加了6.0 1 1 NA 0 1 1 NA 0 1 1 1。是NA,请给我一个简单的方法,非常感谢。假设显示的向量是输入,那么答案中的备选方案(1)有效。X假设y是字符列,而不是因子,我们添加了6.xx