我会提前道歉-我知道其他地方可能已经回答了这个问题,但是我似乎无法找到所需的答案,也无法设法将找到的其他代码适应我的需求。
我有一个数据框:
FILE | TECHNIQUE | COUNT
------------------------
A | ONE | 10
A | TWO | 25
B | ONE | 5
B | TWO | 30
C | ONE | 30
C | TWO | 50
我想产生一个数据帧,该数据帧的值是ONE和TWO之间的COUNT值之差,每个文件都有一行,即
FILE | DIFFERENCE
-----------------
A | 15
B | 25
C | 20
我相信我可以使用R或Plyr底座轻松地做到这一点,但是有点卡住了。谁能建议一个好的方法,也许还有关于Plyr的好的教程,将来可能会帮助我解决类似的问题?
谢谢
最佳答案
在基础中使用aggregate
:
> aggregate(.~FILE, data= DF[, -2], FUN=diff)
FILE COUNT
1 A 15
2 B 25
3 C 20
在plyr中使用
ddply
> ddply(DF[,-2], .(FILE), summarize, DIFFERENCE=diff(COUNT))
FILE DIFFERENCE
1 A 15
2 B 25
3 C 20
与
data.table
> # library(data.table)
> DT <- data.table(DF)
> DT[, diff(COUNT), by=FILE]
FILE V1
1: A 15
2: B 25
3: C 20
与
by
> with(DF, by(COUNT, FILE, diff))
FILE: A
[1] 15
-----------------------------------------------------------------------------
FILE: B
[1] 25
-----------------------------------------------------------------------------
FILE: C
[1] 20
与
tapply
> tapply(DF$COUNT, DF$FILE, diff)
A B C
15 25 20
与doBy包中的
summaryBy
一起使用> # library(doBy)
> summaryBy(COUNT~FILE, FUN=diff, data=DF)
FILE COUNT.diff
1 A 15
2 B 25
3 C 20
更新
占百分比:
> aggregate(.~FILE, data= DF[, -2], function(x) (x[1]/x[2])*100)
FILE COUNT
1 A 40.00000
2 B 16.66667
3 C 60.00000
关于r - 根据匹配列减去列对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18593482/