creating new column based on rows being equal in R

2019-09-02 10:16发布

Here is a simple question about creating a new column conditional on a row duplicate in one column matching criterion in different column. Specifically, if the row is a duplicate in column "pairs", create new column "new" based on rows in column "y" being equal/unequal.

In the actual data frame I have even more conditions for other columns but my main issue is with making these conditions dependent on the rows being the same in the "pairs" column.

Many thanks!

pairs y   new    

 1    1    1    
 1    0    1      
 2    1    0     
 2    1    0    
 3    3    1
 3    1    1

1条回答
太酷不给撩
2楼-- · 2019-09-02 10:54

Assuming values are always paired, i.e., there are only two row in each group:

DF <- read.table(text="pairs y   new    
1    1    1    
1    0    1      
2    1    0     
2    1    0    
3    3    1
3    1    1", header=TRUE)

library(plyr)
#for integers:
ddply(DF, .(pairs), transform, new1 = 1*(diff(y) != 0L))
#for numerics:
ddply(DF, .(pairs), transform, new1 = 1*(abs(diff(y)) > .Machine$double.eps ^ 0.5))
查看更多
登录 后发表回答