r - 在 r 的列中选择最后一个值
问题描述
我有这个条件:
Animal Date.1 Weight.1 Date.2 Weight.2 Date.3 Weight.3 Date.4 Weight.4
1 12/18/19 55 1/2/20 67 6/6/20 101
2 12/18/19 64 1/3/20 69 2/4/20 80
3 12/18/19 75
4 1/3/20 85
5 12/18/19 88 1/6/20 86 2/7/20 96 6/6/20 100
我想选择 weight.1 之后的最后一个重量,如下所示:
Animal Date.last Last Weight
1 6/6/20 101
2 2/4/20 80
3 NA NA
4 1/3/20 85
5 6/6/20 100
抱歉,我没有显示任何脚本,但我什至不知道从哪里开始。
解决方案
这是重塑为“长”格式后的一个选项
library(dplyr)
library(tidyr)
library(stringr)
df1 %>%
pivot_longer(cols = -Animal, names_to = c(".value", "group"),
names_sep="[.]", values_drop_na = TRUE) %>%
group_by(Animal) %>%
slice(n()) %>%
ungroup %>%
mutate_at(vars(Date, Weight), ~ replace(., group == 1, NA)) %>%
select(-group) %>%
rename_at(2:3, ~ str_c(., 'last'))
# A tibble: 5 x 3
# Animal Datelast Weightlast
# <int> <chr> <int>
#1 1 6/6/20 101
#2 2 2/4/20 80
#3 3 <NA> NA
#4 4 1/3/20 85
#5 5 6/6/20 100
数据
df1 <- structure(list(Animal = 1:5, Date.1 = c("12/18/19", "12/18/19",
"12/18/19", NA, "12/18/19"), Weight.1 = c(55L, 64L, 75L, NA,
88L), Date.2 = c("1/2/20", "1/3/20", NA, "1/3/20", "1/6/20"),
Weight.2 = c(67L, 69L, NA, 85L, 86L), Date.3 = c(NA, "2/4/20",
NA, NA, "2/7/20"), Weight.3 = c(NA, 80L, NA, NA, 96L),
Date.4 = c("6/6/20",
NA, NA, NA, "6/6/20"), Weight.4 = c(101L, NA, NA, NA, 100L
)), class = "data.frame", row.names = c(NA, -5L))
推荐阅读
- amazon-web-services - 如何使用 aws 每天复制生产数据库
- android - 解析 LiveQuery 未订阅 - Android (Kotlin)
- python - Python 列表到 BigQuery 重复字符串
- java - Java Future:如何在执行 Aysnc 调用时解除对主线程的阻塞
- ios - 如何在推送通知中更改应用程序的名称?
- elasticsearch - 获取 ES 5.0 之前创建的所有索引
- mysql - 从远程服务器下载 mysql 转储后出现未知数据库错误
- reactjs - API 路由变更 Server React
- c# - 我如何通过控制器的 userId 向特定用户发送 signalR 消息?
- java - 是否可以创建在单个操作中计算其元素的 Stream 实现