给出了一个数据帧,目的是计算数据帧两列之间的直接相关性值。
c1 c2 N
a b 30
a c 5
a d 10
c a 5
b a 10
我们正在寻找的是获取直接依赖关系,例如,对于a
和b
,此值为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
谢谢您的帮助。
答案 0 :(得分:1)
一种选择是创建具有pmin
和pmax
的{{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的想法是对列c1
和c2
进行排序,根据这些值进行拆分,然后减去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