【问题标题】:Find first column for each row in a data set that has a specific value查找数据集中具有特定值的每一行的第一列
【发布时间】:2020-06-06 13:25:25
【问题描述】:

我正在处理时间序列数据。我有一个数据集,格式如下:

国家,01.01.2020, 02.01.2020, 03.01.2020, 04.01.2020, ...

美国,0、3、3、3,

胸罩, 0, 0, 0, 0,

BNE, 0, 0, 0, 4,

中国, 0, 3, 3, 4,

.

.

.

我现在想首先只保留在其任何列中具有 3 或 4 的行。(3 或 4 对应于我要跟踪的事件) 对于所有这些国家(行),我需要知道他们第一次获得 3 或 4 的日期(列)。所以最左边的列是 3 或 4。 我正在尝试生成一个直方图,显示这些日期在所有国家/地区的分布。 所以我的最终目标是制作一个列表,列出每天前 3 或 4 个国家/地区的数量(列)

感谢您的帮助

【问题讨论】:

标签: r data-manipulation


【解决方案1】:

这是tidyverse 的一种方法。首先,将使用pivot_longer 将您的日期放入列中。使用mutate 将日期字符转换为日期格式,注意列名不正确(取决于您的数据框的外观,这可能与我所拥有的不同)。您可以filter 具有感兴趣值(3 或 4)的行,确保按顺序排列日期,然后为每个 Country 选择第一行。最后,您可以group_by(date) 并确定每个日期找到的国家/地区数量。

library(tidyverse)

df %>%
  pivot_longer(cols = -Country, names_to = "date") %>%
  mutate(date = as.Date(date, format = "X%m.%d.%Y")) %>%
  filter(value == 3 | value == 4) %>%
  arrange(date) %>%
  group_by(Country) %>%
  slice(1) %>%
  group_by(date) %>%
  summarise(num_countries = n())

输出

# A tibble: 2 x 2
  date       num_countries
  <date>             <int>
1 2020-02-01             2
2 2020-04-01             1

【讨论】:

  • 非常感谢。这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 2018-10-06
  • 2022-06-26
  • 2019-12-26
  • 1970-01-01
  • 2020-10-03
相关资源
最近更新 更多