R 在数据行对中执行差异

R 在数据行对中执行差异,r,R,我的数据框是: df: one two three a 8 x a 12 y b 9 x b 3 y 结果应该是: one two a 4 b 6 你能帮帮我吗 您可以尝试: library(data.table) setDT(df)[, .(two = abs(diff(two))), .(one)] 带plyr包装: library(plyr)

我的数据框是:

df:

one     two     three
a       8       x
a       12      y
b       9       x
b       3       y
结果应该是:

one     two
a       4
b       6
你能帮帮我吗

您可以尝试:

library(data.table)
setDT(df)[, .(two = abs(diff(two))), .(one)]
plyr
包装:

library(plyr)
ddply(df, 'one', summarise, two = abs(diff(two)))
  one two
1   a   4
2   b   6
您可以尝试:

library(data.table)
setDT(df)[, .(two = abs(diff(two))), .(one)]
plyr
包装:

library(plyr)
ddply(df, 'one', summarise, two = abs(diff(two)))
  one two
1   a   4
2   b   6

下面是一个使用聚合的基本R方法:

aggregate(two~one, data=df, FUN=function(i) abs(diff(i)))
数据

df <- read.table(header=T, text="one     two     three
a       8       x
                 a       12      y
                 b       9       x
                 b       3       y")

df这里是一个使用聚合的基本R方法:

aggregate(two~one, data=df, FUN=function(i) abs(diff(i)))
数据

df <- read.table(header=T, text="one     two     three
a       8       x
                 a       12      y
                 b       9       x
                 b       3       y")

df这里有另一种使用
dplyr的方法

library(dplyr)

 df <- data.frame(one = factor(c("a", "a", "b", "b")),
                 two = c(8,12,9,3),
                 three = factor(c("x", "y", "x", "y")))

 answer <- df %>% group_by(one) %>% summarise(two = abs(diff(two)))

 > answer
Source: local data frame [2 x 2]

     one   two
   (fctr) (dbl)
 1      a     4
 2      b     6
库(dplyr)
df%汇总(两个=绝对值(差异(两个)))
>答复
来源:本地数据帧[2 x 2]
12
(fctr)(dbl)
1 a 4
2 b 6

这里有另一种使用
dplyr的方法

library(dplyr)

 df <- data.frame(one = factor(c("a", "a", "b", "b")),
                 two = c(8,12,9,3),
                 three = factor(c("x", "y", "x", "y")))

 answer <- df %>% group_by(one) %>% summarise(two = abs(diff(two)))

 > answer
Source: local data frame [2 x 2]

     one   two
   (fctr) (dbl)
 1      a     4
 2      b     6
库(dplyr)
df%汇总(两个=绝对值(差异(两个)))
>答复
来源:本地数据帧[2 x 2]
12
(fctr)(dbl)
1 a 4
2 b 6

谢谢您的ans,但是没有data.table library,还有其他方法可以获得结果吗..您也可以使用
plyr
软件包。请参阅更新的答案。感谢您的ans,但是是否有其他方法可以在没有data.table library的情况下获得结果。您也可以使用
plyr
package。请参阅更新后的答案。差异应为绝对值还是必须为x-y?差异应为绝对值还是必须为x-y?