计算R中数据帧的值之间的直接依赖关系

时间:2019-05-28 09:30:04

标签: r dataframe dependencies

给出了一个数据帧,目的是计算数据帧两列之间的直接相关性值。

c1  c2   N
a    b   30
a    c   5
a    d   10
c    a   5
b    a   10

我们正在寻找的是获取直接依赖关系,例如,对于ab,此值为ab - ba = 20。 最终结果应该是这样的:

c1  c2   N     DepValue
a    b   30    ab - ba = 20
a    c   5     ac - ca = 0
a    d   10    ad- 0 = 10
c    a   5     ca - ac= 0
b    a   10    ba - ab = 20

谢谢您的帮助。

3 个答案:

答案 0 :(得分:1)

一种选择是创建具有pminpmax的{​​{1}}和c1值的组,并取两个值之间的差。对于只有一个值的组,这将返回c2,我们可以将NA的{​​{1}}返回到组中的第一个值。

replace

答案 1 :(得分:1)

D <- read.table(header=TRUE, stringsAsFactors = FALSE, text=
"c1  c2   N
a    b   30
a    c   5
a    d   10
c    a   5
b    a   10")

N12 <- D$N
names(N12) <- paste0(D$c1, D$c2)
N21 <- N12[paste0(D$c2, D$c1)]
D$depValue <- D$N - ifelse(is.na(N21), 0, N21)

结果:

> D
  c1 c2  N depValue
1  a  b 30       20
2  a  c  5        0
3  a  d 10       10
4  c  a  5        0
5  b  a 10      -20

答案 2 :(得分:0)

通过基数R的想法是对列c1c2进行排序,根据这些值进行拆分,然后减去N,即

i1 <- paste(pmin(df$c1, df$c2), pmax(df$c1, df$c2))
i1
#[1] "a b" "a c" "a d" "a c" "a b"

do.call(rbind, lapply(split(df, i1), function(i) {i['DepValue'] <- Reduce(`-`, i$N); i}))
#      c1 c2  N DepValue
#a b.1  a  b 30       20
#a b.5  b  a 10       20
#a c.2  a  c  5        0
#a c.4  c  a  5        0
#a d    a  d 10       10