我有个数据框有四个字段,示例如下:

field1 field2 field3 field4

AABBCC AA 1 110

AABBCC AA 2 118

DDEEFF AA 1 103

DDEEFF AA 2 300

FFGGEE BB 1 130

FFGGEE BB 2 330

KKDDII CC 1 129

我希望找出field1相同,field2相同,然后用field3=2对应的field4的值减去field3=1对应的值大于100的行。对应上面示例,就是分别用field4的第二行减第一行,第四行减第三行,第六行减去第五行。原数据排列没有这么整齐。

请教用什么代码可以实现上述操作,整个数据框有几百万行。我希望查找的field1和field2中的值分别存在一个文件中的。

我在网上查了一下,没有找到类似的帖子,所以麻烦了,谢谢!

##首先把data根据field3分成两部分

df1 <- df[df$field3 == 1, ]

df2 <- df[df$field3 == 2, ]

##然后merge

df12 <- merge(df1, df2, by = c("field1","field2"))

##然后提取结果,结果是6列的:

df6 <- df12[df12$field4.y-df12$field4.x > 100, ]

##想要四列的话:

df41 <- df6[,1:4]

df42 <- df6[,c(1,2,5,6)]

colnames(df41) <- colnames(df)

colnames(df42) <- colnames(df)

df4 <- rbind(df41, df42)

df4 <- df4[order(df4$field1, df4$field2), ]

回复 第2楼 的 Robert_Hoo:这个思路不错,谢谢!看来也只有把data分成两部分才可以。