gpt4 book ai didi

r - 将日期列转换为 'period-year'列

转载 作者:行者123 更新时间:2023-12-03 08:13:41 25 4
gpt4 key购买 nike

我有4000个观测值的数据,所以这是head(both):

     kön             gdk   age fbkurs     pers   stterm
1 man FALSE 69 FALSE 1941-12-23 2011-01-19
2 man NA 70 FALSE 1942-02-11 2012-01-19
3 kvinna NA 65 FALSE 1942-06-04 2007-09-01
4 kvinna TRUE 68 FALSE 1943-04-04 2011-09-01
5 kvinna NA 65 FALSE 1943-10-30 2008-09-01
6 man FALSE 70 TRUE 1944-01-27 2013-09-01

我想基于名为“stterm”的列创建一个新列。
在stterm中,我有不同的日期,例如,我更愿意命名。 VT10,VT11等。我喜欢将新列称为 regyear

我试图输入:
regyear <- factor(both$stterm, levels = c("2007-09-01"="HT07" "2008-09-01"="HT09" "2009-01-19"="VT09" "2009-09-01"="HT09" "2010-01-19"="VT10" "2010-09-01"="HT10" "2011-01-19"="VT11"
"2011-09-01"="HT11" "2012-01-19"="VT12" "2012-09-01"="HT12" "2013-01-19"="VT13" "2013-09-01"="HT13" "2014-01-19"="VT14"))

但是当我这样做时,我收到以下错误消息:
Error: unexpected string constant in "regyear<- factor(both$stterm, levels = c("2007-09-01"='HT07' "2008-09-01""

我该怎么做才能使它们正确?

最佳答案

您的代码依赖于相当多的硬编码,这可能会容易出错,并且如果您有许多希望映射到句点的日期,则将很乏味。

以下是一些替代方法,其中首先使用Date将日期转换为as.Date类。这使得更容易提取月份并将其映射到期间“VT”或“HT”,以及提取年份。

在第一个示例中,我使用cut,它“将x的范围划分为间隔,并根据它们落入的间隔对x中的值进行编码”:

# some dates which are converted to proper R dates
dates <- as.Date(c("2006-09-01", "2007-02-01", "2008-09-01", "2009-01-19"))

# extract month
month <- as.integer(format(dates, "%m"))

# extract year
year <- format(dates, "%y")

# cut the months into intervals and label the levels
term <- cut(x = month, breaks = c(0, 8, 12), labels = c("VT", "HT"))

# paste 'term' and 'year' together
paste0(term, year)
# [1] "HT06" "VT07" "HT08" "VT09"

在第二个示例中, findInterval用于创建间隔索引的数值 vector 。该 vector 用于从“周期” vector 中提取元素。然后将期间粘贴上面的年份。
paste0(c("VT", "HT")[findInterval(x = month, vec = c(1, 9))], year)
# [1] "HT06" "VT07" "HT08" "VT09"

最后,采用类似的“手动”方法,如果您希望将许多“中断”和时间间隔映射到日期,则这种方法不太方便:
paste0(c("VT", "HT")[as.integer(month > 8) + 1], year)
# [1] "HT06" "VT07" "HT08" "VT09"

另一个相关的问答 here

关于r - 将日期列转换为 'period-year'列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29588076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com