【发布时间】:2016-03-27 21:23:44
【问题描述】:
我有以下数据:
d <- data.frame(id=c(1,2,3,4,5,6,7),
year=c(1999,1999,1999,2000,2000,2000,2000),
var1=c(1,1,2,1,4,1,8),
var2=c(1,1,2,1,5,2,0),
var3=c(0,0,0,0,7,0,0))
> d
id year var1 var2 var3
1 1 1999 1 1 0
2 2 1999 1 1 0
3 3 1999 2 2 0
4 4 2000 1 1 0
5 5 2000 4 5 7
6 6 2000 1 2 0
7 7 2000 8 0 0
我想评估 data.frame 的每一行并在名为“comb”的新变量中返回一个分数。
如果一行包含 var1-var3 之间的组合,即:
- 前几年从未观察到(但元素是)-->assign comb=1
- 包含一个前几年从未见过的元素-->assign comb=2
- 前几年从未观察到并拥有一个新元素-->assign comb=3
- 往年观察-->assign comb=0
一些旁注:
- 出现的顺序无关紧要 (1,1,2 == 1,2,1)
- 同一年的重复组合可能被标记为相同
在示例数据中,应如下所示:
d2 <- data.frame(id=c(1,2,3,4,5,6,7),
year=c(1999,1999,1999,2000,2000,2000,2000),
var1=c(1,1,2,1,4,1,8),
var2=c(1,1,2,1,5,2,0),
var3=c(0,0,0,0,7,0,0),
comb=c(3,3,3,0,3,1,2))
> d2
id year var1 var2 var3 comb
1 1 1999 1 1 0 3
2 2 1999 1 1 0 3
3 3 1999 2 2 0 3
4 4 2000 1 1 0 0
5 5 2000 4 5 7 3
6 6 2000 1 2 0 1
7 7 2000 8 0 0 2
请注意,第二行指定为 comb=3,因为这是我们观察到该组合的第一年。如果此观测值是 year=200(如第 4 行),则分配为零。
这可能吗?非常感谢任何帮助!
【问题讨论】:
-
在你的输出中,第二行似乎在那一年已经存在,为什么不是0?
-
你能在输出中写下详细的注释来描述你想要的样子吗?
-
@adiana :我想将给定年份中的每个重复观测值都标记为相同。
-
@InfiniteFlashChess :我提供了更详细的描述。这就是你发表评论的目的吗?感谢回复!
-
我看到了问题,嗯,就像 adiana 提到的为什么不是 0?