根据R中的向量变化来改变行数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据R中的向量变化来改变行数相关的知识,希望对你有一定的参考价值。
我有一个数据框列出如下:
unique Treatment Rep Beak time nx survival
1.1.1 1 1 1 0 25 0
1.1.1 1 1 1 0 25 0
1.1.1 1 1 1 0 25 0
1.1.1 1 1 1 2 24 0
1.1.1 1 1 1 2 24 0
1.1.1 1 1 1 4 17 1
1.1.1 1 1 1 4 17 1
1.1.1 1 1 1 4 17 1
1.1.1 1 1 1 4 17 1
1.1.2 1 1 2 0 25 0
1.1.2 1 1 2 0 25 0
1.1.2 1 1 2 2 22 0
1.1.2 1 1 2 2 22 0
1.1.2 1 1 2 2 22 0
1.1.2 1 1 2 2 22 0
1.1.2 1 1 2 4 16 1
1.1.2 1 1 2 4 16 1
1.1.2 1 1 2 4 16 1
1.1.2 1 1 2 4 16 1
我需要过滤掉生存为0的行,但仍然要确保代表那些个体的time
。本质上,我想修改行,如果nx
中的值是>
,nx
分组的最小unique
值,行数应该等于该组的最大nx
值减去nx
。这是我提出的代码:
df <- df %>%
group_by(unique) %>%
mutate(nx = case_when(
nx > min(nx) ~ rep(.$nx, each = max(.$nx)-.$nx)))
所需的数据框应如下所示:
unique Treatment Rep Beak time nx survival
1.1.1 1 1 1 2 24 0 #one row left with nx of 24
1.1.1 1 1 1 4 17 1
1.1.1 1 1 1 4 17 1
1.1.1 1 1 1 4 17 1
1.1.1 1 1 1 4 17 1
1.1.2 1 1 2 2 22 0 #3 rows left with nx of 22
1.1.2 1 1 2 2 22 0
1.1.2 1 1 2 2 22 0
1.1.2 1 1 2 4 16 1
1.1.2 1 1 2 4 16 1
1.1.2 1 1 2 4 16 1
1.1.2 1 1 2 4 16 1
我似乎在复制行适当的次数时遇到了麻烦。我试图将它强制转换为矩阵并设置nrow = max(.$nx)-.$nx
,但它没有成功。有人可以提供一些建议吗?
答案
数据:
dat <- data_frame(unique = c(rep("1.1.1", 9),
rep("1.1.2", 10)),
treatment = rep(1, 19),
Rep = rep(1, 19),
Break = c(rep(1, 9),
rep(2, 10)),
time = c(0, 0, 0, 2, 2,
4, 4, 4, 4,
0, 0,
2, 2, 2, 2,
4, 4, 4, 4),
nx = c(25, 25, 25,
24, 24,
17, 17, 17, 17,
25, 25,
22, 22, 22, 22,
16, 16, 16, 16),
survival = c(rep(0, 5),
rep(1, 4),
rep(0, 6),
rep(1, 4))
)
首先,由unique
分组并创建一个名为keep
的变量,以找出组内max(nx)
和nx
之间的差异。然后,由unique
和survival
分组。保持每个实例都是survival == 1
和survival == 0
和nx
等于最小值的每个实例。在此之后,我们需要过滤掉{unique,survival}组中大于survival == 0
的每个keep
实例。我们可以使用row_numbers
来实现这一目标,确保我们仍然保留survival == 0
的每个实例。
dat %>%
group_by(unique) %>%
mutate(keep = max(nx) - nx) %>%
group_by(unique, survival) %>%
filter(survival == 0 & nx == min(nx) |
survival == 1) %>%
filter(row_number() %in% 1:unique(keep) |
survival == 1) %>%
select(-keep) %>%
ungroup()
结果:
# A tibble: 12 x 7
unique treatment Rep Break time nx survival
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1.1.1 1. 1. 1. 2. 24. 0.
2 1.1.1 1. 1. 1. 4. 17. 1.
3 1.1.1 1. 1. 1. 4. 17. 1.
4 1.1.1 1. 1. 1. 4. 17. 1.
5 1.1.1 1. 1. 1. 4. 17. 1.
6 1.1.2 1. 1. 2. 2. 22. 0.
7 1.1.2 1. 1. 2. 2. 22. 0.
8 1.1.2 1. 1. 2. 2. 22. 0.
9 1.1.2 1. 1. 2. 4. 16. 1.
10 1.1.2 1. 1. 2. 4. 16. 1.
11 1.1.2 1. 1. 2. 4. 16. 1.
12 1.1.2 1. 1. 2. 4. 16. 1.
以上是关于根据R中的向量变化来改变行数的主要内容,如果未能解决你的问题,请参考以下文章
R:我如何根据前一天的信息改变证券交易所每日指数的时间序列中的差距(假期)?