创建一个向量,其连续元素重复的次数与相邻列中的相应值相同
Creating a vector, sequential elements of which are repeated that many times as the corresponding values in neighbouring columns
在下面的样本数据框中,输出向量应该是[1] 1,1,1,2,1,1,1,2,2,3,3,3,4,5,5,5,5,1,1,2,3,3,3
P N N+1 N+2 N+3 N+4
2 3 1 1 2 1
5 3 2 3 1 4
3 2 1 3 4 5
解释:
- P 中的值指示应读取数据帧值到右侧多远。 seq(P) 中的值应该重复那么多次。
- P的第一个值为2,也就是说在seq(2)中(即1,2),第一个元素要重复3次,第二个元素要重复1次。
- 这是因为P的值(2)表示读取它右边的前两个元素。右侧的那些值本身表示 2 的连续元素应重复多少次。
此处的一个选项是使用 apply
MARGIN = 1
遍历行,然后根据第一个元素即 'P' 获取 seq
,复制seq
与使用该序列子集的 'N' 列的相应值的关系
unlist(apply(df1, 1, function(x) {
i1 <- seq(x[1])
rep(i1, x[-1][i1])
}))
-输出
#[1] 1 1 1 2 1 1 1 2 2 3 3 3 4 5 5 5 5 1 1 2 3 3 3
数据
df1 <- structure(list(P = c(2L, 5L, 3L), N = c(3L, 3L, 2L), `N+1` = c(1L,
2L, 1L), `N+2` = c(1L, 3L, 3L), `N+3` = c(2L, 1L, 4L), `N+4` = c(1L,
4L, 5L)), class = "data.frame", row.names = c(NA, -3L))
在下面的样本数据框中,输出向量应该是[1] 1,1,1,2,1,1,1,2,2,3,3,3,4,5,5,5,5,1,1,2,3,3,3
P N N+1 N+2 N+3 N+4
2 3 1 1 2 1
5 3 2 3 1 4
3 2 1 3 4 5
解释:
- P 中的值指示应读取数据帧值到右侧多远。 seq(P) 中的值应该重复那么多次。
- P的第一个值为2,也就是说在seq(2)中(即1,2),第一个元素要重复3次,第二个元素要重复1次。
- 这是因为P的值(2)表示读取它右边的前两个元素。右侧的那些值本身表示 2 的连续元素应重复多少次。
此处的一个选项是使用 apply
MARGIN = 1
遍历行,然后根据第一个元素即 'P' 获取 seq
,复制seq
与使用该序列子集的 'N' 列的相应值的关系
unlist(apply(df1, 1, function(x) {
i1 <- seq(x[1])
rep(i1, x[-1][i1])
}))
-输出
#[1] 1 1 1 2 1 1 1 2 2 3 3 3 4 5 5 5 5 1 1 2 3 3 3
数据
df1 <- structure(list(P = c(2L, 5L, 3L), N = c(3L, 3L, 2L), `N+1` = c(1L,
2L, 1L), `N+2` = c(1L, 3L, 3L), `N+3` = c(2L, 1L, 4L), `N+4` = c(1L,
4L, 5L)), class = "data.frame", row.names = c(NA, -3L))