R查找数据框列的最小日期值
R Find minimum Date Value for Dataframe column
我有以下数据框:
df <- data.frame(
"DateValue" = c("2016-07-01", "2016-07-02", "2016-07-03",
"2016-07-04","2016-07-05", "2016-07-06","2016-07-07"),
"Age1" = c(rep(NA, 2), seq(14,18,2), NA, NA),
"Age2" = c(rep(NA, 1), seq(18,28,2)),
"Wages"= c(1000,1200,2100,5000,3000,2220,300)
)
我正在尝试查找以 "Age" 开头的所有列的最短日期。下面是一个代表性的输出:
output <- ['2016-07-03', '2016-07-02']
我查看了所有使用 dplyr 包为具有多个 ID 的 Dataframe 提供最大和最小日期的 SO 解决方案,但无法弄清楚如何将它们应用于我的情况。下面是一个相关的 SO post。类似问题的所有解决方案都使用相同的包:
详情见评论:
df <- data.frame(
"DateValue" = c("2016-07-01", "2016-07-02", "2016-07-03",
"2016-07-04","2016-07-05", "2016-07-06","2016-07-07"),
"Age1" = c(rep(NA, 2), seq(14,18,2), NA, NA),
"Age2" = c(rep(NA, 1), seq(18,28,2)),
"Wages"= c(1000,1200,2100,5000,3000,2220,300)
)
#convert to date
df$DateValue<-as.Date(df$DateValue)
library(dplyr)
#select the proper columns, filter columns and return min date
answer<-sapply(df %>% select(starts_with("Age")), function(x){ min(df$DateValue[!is.na(x)])})
#convert from serial number back to a date
answer<-as.Date(answer, "1970-01-01")
answer
Age1 Age2
"2016-07-03" "2016-07-02"
我有以下数据框:
df <- data.frame(
"DateValue" = c("2016-07-01", "2016-07-02", "2016-07-03",
"2016-07-04","2016-07-05", "2016-07-06","2016-07-07"),
"Age1" = c(rep(NA, 2), seq(14,18,2), NA, NA),
"Age2" = c(rep(NA, 1), seq(18,28,2)),
"Wages"= c(1000,1200,2100,5000,3000,2220,300)
)
我正在尝试查找以 "Age" 开头的所有列的最短日期。下面是一个代表性的输出:
output <- ['2016-07-03', '2016-07-02']
我查看了所有使用 dplyr 包为具有多个 ID 的 Dataframe 提供最大和最小日期的 SO 解决方案,但无法弄清楚如何将它们应用于我的情况。下面是一个相关的 SO post。类似问题的所有解决方案都使用相同的包:
详情见评论:
df <- data.frame(
"DateValue" = c("2016-07-01", "2016-07-02", "2016-07-03",
"2016-07-04","2016-07-05", "2016-07-06","2016-07-07"),
"Age1" = c(rep(NA, 2), seq(14,18,2), NA, NA),
"Age2" = c(rep(NA, 1), seq(18,28,2)),
"Wages"= c(1000,1200,2100,5000,3000,2220,300)
)
#convert to date
df$DateValue<-as.Date(df$DateValue)
library(dplyr)
#select the proper columns, filter columns and return min date
answer<-sapply(df %>% select(starts_with("Age")), function(x){ min(df$DateValue[!is.na(x)])})
#convert from serial number back to a date
answer<-as.Date(answer, "1970-01-01")
answer
Age1 Age2
"2016-07-03" "2016-07-02"