首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种方法R可以在一行中找到一个数字的第一个实例,然后返回列值?

是否有一种方法R可以在一行中找到一个数字的第一个实例,然后返回列值?
EN

Stack Overflow用户
提问于 2022-10-06 16:13:58
回答 1查看 24关注 0票数 0

我遇到了一个问题,想要找到一种方法来自动化一个过程,这个过程需要我在Excel中用很长时间才能完成,我正在看是否有办法在R中完成。

我的数据集与植物生长阶段的发展有关。每一株植物在一个季节的多天内被测量,每株植物(是它自己的行)都有一个分数,从0到5,这与它被评分的日期有关(每一天都是它自己的列)。下面是一个例子,说明一个工厂的数据是怎样的。

这是在我的数据集中记录植物生长情况的一个例子

我想要找到的是植物从'0‘分到'1’分数的相关日子,植物从'1‘分到'2’分数的日子,等等,直到第5个和最后一个分数。

如果有任何方法,你可以想象这是在R,请告知。谢谢,祝您今天愉快。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-06 17:00:30

给出一些你所描述的数据:

代码语言:javascript
运行
复制
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

我会使用以下方法将数据重新格式化为长格式,按每个工厂分组,并进行筛选,只保留以前日期更改的观测结果。

代码语言:javascript
运行
复制
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”的观察来模拟这种情况,并展示了在下一个日期添加这些数据的一种方法:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73977028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档