【发布时间】:2021-01-12 01:18:27
【问题描述】:
我有一个如下所示的 data.frame:
我想构建一个可以捕获每个 ID 的 min(date1, date2, date3, date4) 的变量。我该怎么办?
我想知道两种情况:
- 如果每行的 ID 都是唯一的;
- 如果 ID 不是唯一的;
- 如果一组变量具有相似的变量名称(例如 dateX),是否有一种简单的方法可以从一组变量中获取最小值?尽量避免输入
date1, date2, date3, date4。
可以使用代码构建样本数据:
df <- structure(list(ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32), date1 = structure(c(1512432000, 1514937600,
1517788800, 1524009600, 1541721600, 1554336000, 1562803200, 1562889600,
1521504000, 1525392000, 1530576000, 1534291200, 1535414400, 1538697600,
1541548800, 1545091200, 1549238400, 1551916800, 1553644800, 1554076800,
1560384000, 1561420800, 1562716800, 1566432000, 1567555200, 1548979200,
1554508800, 1555372800, 1556236800, 1561939200, 1563926400, 1563926400
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), date2 = structure(c(1512777600,
1515283200, 1518134400, 1524355200, 1542067200, 1555459200, 1563148800,
1563580800, NA, 1525737600, 1530921600, 1534636800, 1535760000,
1539043200, 1541894400, 1545436800, 1549584000, 1552262400, 1553990400,
1554422400, 1560729600, 1561766400, 1563062400, 1566777600, 1567900800,
1549324800, 1554854400, 1555718400, 1556582400, 1562284800, 1564272000,
1564272000), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
date3 = structure(c(1512777600, 1515283200, 1518134400, 1524355200,
1542067200, NA, 1563148800, 1563580800, 1521849600, 1525737600,
NA, NA, NA, NA, 1541894400, 1545436800, 1549584000, 1552262400,
1553990400, 1554422400, 1560729600, 1561766400, 1563062400,
1566777600, 1567900800, 1549324800, 1554854400, 1555718400,
1556582400, 1562284800, 1564272000, 1564272000), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), date4 = structure(c(NA, NA, NA,
NA, NA, 1555459200, NA, NA, NA, NA, NA, 1530921600, 1534636800,
1535760000, 1539043200, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA), class = c("POSIXct", "POSIXt"
), tzone = "UTC")), row.names = c(NA, -32L), class = c("tbl_df",
"tbl", "data.frame"))\
谢谢。
【问题讨论】:
-
library(dplyr); df %>% group_by(ID) %>% summarise_all(.funs = min) -
感谢您的建议。但是我的数据会有更多的变量,所以
summarise_all()不起作用 -
library(dplyr); df %>% group_by(ID) %>% summarise(across(starts_with("date"), min))
标签: r