我的資料包括多年來對 1000 人的多次觀察。這些資料包括觀察時的年齡。資料如下所示:
Person A | 2016-01-0 | 35
Person A | 2016-01-3 | 35
Person A | 2016-01-8 | 36
在這種情況下,您可以告訴 A 人出生于 1980-01-04 和 1980-01-08 之間,我希望能夠獲取出生日期(出生月份和年份也將做 - 即使只是出生年份也可以)適用于資料中的所有人。但是,不確定如何在不手動查看并查看年齡變化的位置并記下相應日期的情況下進行此操作。
任何幫助是極大的贊賞。
uj5u.com熱心網友回復:
每一行都為我們提供了該人的一個可能范圍。如果您為每個人獲取這些行的最新“min_DOB”和最早的“max_DOB”,您可以獲得您描述的縮小范圍。
library(dplyr); library(lubridate)
df %>%
mutate(min_DOB = V2 %>% ymd - years(V3) - 365, # dragons b/c leap years;
max_DOB = V2 %>% ymd - years(V3)) %>%
group_by(V1) %>%
summarize(min_DOB = max(min_DOB),
max_DOB = min(max_DOB))
# A tibble: 1 x 3
V1 min_DOB max_DOB
<chr> <date> <date>
1 Person A 1980-01-04 1980-01-08
資料
df <- data.frame(
stringsAsFactors = FALSE,
V1 = c("Person A", "Person A", "Person A"),
V2 = c("2016-01-01", "2016-01-03", "2016-01-08"),
V3 = c(35L, 35L, 36L)
)
uj5u.com熱心網友回復:
您可以通過洗掉第一個之后的所有內容-并從中減去年齡來提取年份。
df <- transform(df, yob = as.numeric(sub('-.*', '', V2)) - V3)
# V1 V2 V3 yob
#1 Person A 2016-01-0 35 1981
#2 Person A 2016-01-3 35 1981
#3 Person A 2016-01-8 36 1980
資料
df <- structure(list(V1 = c("Person A", "Person A", "Person A"), V2 = c("2016-01-0",
"2016-01-3", "2016-01-8"), V3 = c(35L, 35L, 36L)),
row.names = c(NA, -3L), class = "data.frame")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/350574.html
