我有一张这样的桌子:

country    continent      date         n_case         Ex         TD         TC
--------------------------------------------------------------------------------
 Italy      Europe      2022-02-24        6           NA          2          90
 Italy      Europe      2022-01-17        12          87          2          86
 USA        America     2022-02-23        NA          NA          3          65
 USA        America     2022-01-08        6           NA          5          67
 USA        America     2022-01-04        6           7           7          87
etc etc...

我希望的是一个新的数据框,每个国家有一行,每个国家将以列的形式存储国家名称(列=国家)和大陆(列=大陆),以及列中每个值报告的最新日期(日期、n_情况、Ex、TD、TC):

理想的数据框架:

country    continent      date         n_case         Ex         TD         TC
--------------------------------------------------------------------------------
 Italy      Europe      2022-02-24        6           87          2          90
 USA        America     2022-02-23        6           7           3          65
 etc etc..

要忽略的值为NA或""(空白)

非常感谢.

推荐答案

使用dplyr,可以按日期递减对数据进行排序,然后在每列中 Select 第一个非NA值.

library(dplyr)

df %>%
  group_by(country, continent) %>%
  arrange(desc(date), .by_group = TRUE) %>% 
  summarise(across(everything(), ~ .x[!is.na(.x)][1])) %>%
  ungroup()

# # A tibble: 2 × 7
#   country continent date       n_case    Ex    TD    TC
#   <chr>   <chr>     <date>      <int> <int> <int> <int>
# 1 Italy   Europe    2022-02-24      6    87     2    90
# 2 USA     America   2022-02-23      6     7     3    65

Data
df <- structure(list(country = c("Italy", "Italy", "USA", "USA", "USA"),
continent = c("Europe", "Europe", "America", "America", "America"),
date = structure(c(19047, 19009, 19046, 19000, 18996), class = "Date"), 
n_case = c(6L, 12L, NA, 6L, 6L), Ex = c(NA, 87L, NA, NA, 7L),
TD = c(2L, 2L, 3L, 5L, 7L), TC = c(90L, 86L, 65L, 67L, 87L)),
row.names = c(NA, -5L), class = "data.frame")

R相关问答推荐

合并两个具有相同变量名和(大部分)不同 na 的数据帧

geom - text:标签的条件水平对齐(hjust using ifelse)

如何插入字符串以使每一行具有相同的模式

R:获取嵌套列表中值的比例并存储在数据框中

如何从另一个数据框中的数据在 R 中创建新列?

合并两列中的字符值并用括号括起来

简化对标签进行分组的过程

如何根据 R 中另一个数据框中的概率创建具有值的变量?

为什么 R `stringr::str - extract('word.42', pattern = '\\d*')` 不产生 `"42"`?

如何对列表元素进行分组(在 Base R 中)

填充需要在 R 的不同列中使用前几行的数据框

R: 无法从 url 下载 .zip

Quarto revealjs:增加代码块的相对字体大小

在 R 中的列表中附加一些字符串

R 函数 nlminb() 使用的函数

使用应用,将新列添加到列表中的数据框,其中值也存储在 R 中的列表中

查找单字母词位置的有效方法

如果在 R 中用特殊字符(如+号)分隔,则为数据框中的项目创建新行

在数据框的新列的循环中添加 box.test 的结果

将两个向量之间的函数投影到 R 中的数据框中