我遇到了一个问题,想要找到一种方法来自动化一个过程,这个过程需要我在Excel中用很长时间才能完成,我正在看是否有办法在R中完成。
我的数据集与植物生长阶段的发展有关。每一株植物在一个季节的多天内被测量,每株植物(是它自己的行)都有一个分数,从0到5,这与它被评分的日期有关(每一天都是它自己的列)。下面是一个例子,说明一个工厂的数据是怎样的。
我想要找到的是植物从'0‘分到'1’分数的相关日子,植物从'1‘分到'2’分数的日子,等等,直到第5个和最后一个分数。
如果有任何方法,你可以想象这是在R,请告知。谢谢,祝您今天愉快。
发布于 2022-10-06 17:00:30
给出一些你所描述的数据:
df1 <- structure(list(ID = c("A", "B"), `2022-10-06` = c(0, 1), `2022-10-07` = c(0,2),
`2022-10-08` = c(0, 3), `2022-10-09` = c(1, 3), `2022-10-10` = c(2,4),
`2022-10-11` = c(3, 4), `2022-10-12` = c(3, 4), `2022-10-13` = c(4,5),
`2022-10-14` = c(4, 5), `2022-10-15` = c(5, 5)), class = c("tbl_df","tbl", "data.frame"),
row.names = c(NA, -2L))
df1
# A tibble: 2 × 11
ID `2022-10-06` `2022-10-07` `2022-10-08` `2022-10-09` `2022-10-10` `2022-10-11` `2022-10-12` `2022-10-13` `2022-10-14` `2022-10-15`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 0 0 0 1 2 3 3 4 4 5
2 B 1 2 3 3 4 4 4 5 5 5
我会使用以下方法将数据重新格式化为长格式,按每个工厂分组,并进行筛选,只保留以前日期更改的观测结果。
library(tidyverse)
df1 %>%
pivot_longer(-ID) %>%
group_by(ID) %>%
filter(value != lag(value, default = 0)) %>%
ungroup()
# A tibble: 10 × 3
ID name value
<chr> <chr> <dbl>
1 A 2022-10-09 1
2 A 2022-10-10 2
3 A 2022-10-11 3
4 A 2022-10-13 4
5 A 2022-10-15 5
6 B 2022-10-06 1
7 B 2022-10-07 2
8 B 2022-10-08 3
9 B 2022-10-10 4
10 B 2022-10-13 5
一种植物可能在观察期间生长超过1,在这种情况下,你可能希望所有新的高度都能记录新的观测日期。下面,我删除了“with = 3”的观察来模拟这种情况,并展示了在下一个日期添加这些数据的一种方法:
df1 %>%
pivot_longer(-ID) %>%
group_by(ID) %>%
filter(value != lag(value, default = 0)) %>%
filter(row_number() != 3) %>%
complete(value = 1:5) %>%
fill(name, .direction = "up") %>%
ungroup()
# A tibble: 10 × 3
ID value name
<chr> <dbl> <chr>
1 A 1 2022-10-09
2 A 2 2022-10-10
3 A 3 2022-10-13
4 A 4 2022-10-13
5 A 5 2022-10-15
6 B 1 2022-10-06
7 B 2 2022-10-07
8 B 3 2022-10-10
9 B 4 2022-10-10
10 B 5 2022-10-13
https://stackoverflow.com/questions/73977028
复制相似问题