aat*_*lob 5 r time-series plyr
假设我有一个持续几个时期的变量.就像我有一个Ipod的年数.所以我从2001年到2004年都有Ipod第一代,然后在2005年我得到了Ipod 2等等.所以我的数据框看起来像:
2001 Ipod1
2002 Ipod1
2003 Ipod1
2004 Ipod1
2005 Ipod2
2006 Ipod2
2007 Ipod2
2008 Ipod2
2009 Ipod3
2010 Ipod3
Run Code Online (Sandbox Code Playgroud)
我想要的是在新变量到来的时候创建一个假人,所以我会得到:
Year Var Dummy
2001 Ipod1 1
2002 Ipod1 0
2003 Ipod1 0
2004 Ipod1 0
2005 Ipod2 1
2006 Ipod2 0
2007 Ipod2 0
2008 Ipod2 0
2009 Ipod3 1
2010 Ipod3 0
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经能够做到这一点:
df = structure(list(Year = 2001:2010, Var = structure(c(1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 3L, 3L), .Label = c("Ipod1", "Ipod2", "Ipod3"
), class = "factor")), .Names = c("Year", "Var"), class = "data.frame", row.names = c(NA,
-10L))
df$number.in.group = unlist(lapply(table(df$Var),seq.int))
df$dummy = ifelse(df$number.in.group == 1,1,0)
df$dummy[1]=0
Run Code Online (Sandbox Code Playgroud)
实际上我希望假人的第一个元素为零.
我的问题是:有没有办法以更好的方式做到这一点?
谢谢
Jos*_*ien 10
这个怎么样:
df$Dummy <- as.numeric(!duplicated(df$Var))
# Or, if you want the first element to be 0,
df$Dummy <- c(0, as.numeric(!duplicated(df$Var))[-1])
Run Code Online (Sandbox Code Playgroud)
我相信这会产生预期的结果:
> df$Dummy <- c(0, diff(as.numeric(df$Var)))
> df
Year Var Dummy
1 2001 Ipod1 0
2 2002 Ipod1 0
3 2003 Ipod1 0
4 2004 Ipod1 0
5 2005 Ipod2 1
6 2006 Ipod2 0
7 2007 Ipod2 0
8 2008 Ipod2 0
9 2009 Ipod3 1
10 2010 Ipod3 0
Run Code Online (Sandbox Code Playgroud)
这是因为Var是一个因素,所以使用as.numeric工作.
归档时间: |
|
查看次数: |
156 次 |
最近记录: |