2013-11-28 35 views
0

我有一个数据帧,测试,这样定义的元件匹配,使长行:的R - 如何通过原始行

id <- c(100, 100, 101, 101, 102, 102) 
v1 <- c(1,2,0,0,3,0) 
v2 <- c(2,3,5,8,4,1) 
test <- data.frame (id, v1, v2) 

如何使一个新的数据帧,TEST2,其中I有只有三行,由id匹配。每行都有以下列:id,v1.1,v2.1,v3.1,v1.2,v2.2,v3.2。换句话说,对于每个唯一的ID,我将创建一个新行,它将共享此ID的旧行组合起来。我想知道如何做到这一点。

此外,上述方法旨在找出哪两个观测值都是0。我想删除这些。例如,我会删除ID为101的两个观察值,因为它们都是0。我会保留这两个观察id 102,因为只有其中一个是0.是否有另一种方法做到这一点,而不采取上述方法?

非常感谢和感恩节快乐!

+1

如果你有相同的id,一个0 v1和另一0在v2中,你会删除此行,否则你会继续吗? – agstudy

+0

我会保留那一个。我现在可以做的是,在您的答案非常好之后,创建一个新变量,将其称为sum,并将sum定义为v1.1 + v1.2。然后检查是否sum == 0.如果是,请删除它。 – bill999

回答

1

我认为你试图在宽格式中重塑data.frame。

使用aggregate

aggregate(.~id,test,FUN=I) 
    id v1.1 v1.2 v2.1 v2.2 
1 100 1 2 2 3 
2 101 0 0 5 8 
3 102 3 0 4 1