gpt4 book ai didi

r - 定义带条件的四分之一列

转载 作者:行者123 更新时间:2023-12-02 06:28:15 25 4
gpt4 key购买 nike

我有一个数据框如下:

ID Mois Year
A 12 2010
B 01 2011
C 04 2010
D 05 2011
E 07 2011
F 11 2010
G 12 2011
H 03 2010
I 01 2012
J 02 2012

我想将季度列添加为:

quarter1: ( 12(of n-1), 01 of n, 02 of n): means (12 of 2010, 01 of 2011, 02 of 2011)

quarter2:(03 of n , 04 of n, 05 of n)

quarter3: (06 of n, O7 of n, O8of n)

quarter4:( 09of n, 10 of n, 11 of n)

我试过这段代码`

data=cbind(data, quarter=ifelse(data$mois==c(12,1,2), "1",
ifelse(data$mois==c(3,4,5),"2",
ifelse(data$mois==c(6,7,8),"3", "4"))))

但它不起作用,我不知道如何将 quarter1 的条件添加为 ( 12(of n-1), 01 of n, 02 of n): means (12 of 2010, 01 of 2011, 02 2011 年)

或者我们可以替换 data$year其中 data$month == 12year + 1 ,在做季度之前?

如有任何帮助,我们将不胜感激。

最佳答案

1)公式我们可以用这个公式来计算季度:

transform(data, YearQ = Year + (Mois == 12), Quarter = Mois %% 12 %/% 3 + 1)

给予:

   ID Mois Year YearQ Quarter
1 A 12 2010 2011 1
2 B 1 2011 2011 1
3 C 4 2010 2010 2
4 D 5 2011 2011 2
5 E 7 2011 2011 3
6 F 11 2010 2010 4
7 G 12 2011 2012 1
8 H 3 2010 2010 2
9 I 1 2012 2012 1
10 J 2 2012 2012 1

2) yearqtr 另一种可能性是使用 "yearqtr" 类给出相同的结果:

library(zoo)

transform(data, YearQ = Year + (Mois == 12), Quarter = cycle(as.yearqtr(Year + Mois/12)))

与 (1) 相同。

2a) 或者,我们可能只希望创建 yearmon 和 yearqtr 列:

transform(data, ym = as.yearmon(Year + (Mois -1)/12), yq = as.yearqtr(Year + Mois/12))

给予:

   ID Mois Year       ym      yq
1 A 12 2010 Dec 2010 2011 Q1
2 B 1 2011 Jan 2011 2011 Q1
3 C 4 2010 Apr 2010 2010 Q2
4 D 5 2011 May 2011 2011 Q2
5 E 7 2011 Jul 2011 2011 Q3
6 F 11 2010 Nov 2010 2010 Q4
7 G 12 2011 Dec 2011 2012 Q1
8 H 3 2010 Mar 2010 2010 Q2
9 I 1 2012 Jan 2012 2012 Q1
10 J 2 2012 Feb 2012 2012 Q1

3) switch 我们可以这样使用switch:

transform(data, YearQ = Year + (Mois == 12), 
Quarter = sapply(Mois, switch, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 1)))

与 (1) 相同。

注意事项

可重现形式的输入数据是:

Lines <- "
ID Mois Year
A 12 2010
B 01 2011
C 04 2010
D 05 2011
E 07 2011
F 11 2010
G 12 2011
H 03 2010
I 01 2012
J 02 2012"
data <- read.table(text = Lines, header = TRUE)

关于r - 定义带条件的四分之一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48954305/

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