【发布时间】:2019-12-14 10:59:36
【问题描述】:
我有一个包含 3 个向量的列表,X、Y 和 Z。我想减去这 3 个向量的 类似名称 元素。也就是说,类似名称的元素会像这样被减去:X - Y - Z。
另外,如果一个元素(这里是 ChandlerA 和 X 中的 Trus.Hsu)在一个向量中只出现一次,而在其他向量中不出现,那么我想完全跳过该元素。
我的想要的输出是:
c(Bit.KnoA = -2, Bit.KnoB = -4, Bit.KnoC = -2, Ellis.etal = 3, Mubarak = 3, sheenA = 5, Shin.Ellis = 5, Sun = 7)
是否有可能在 Base R 中实现这一点?
V = list(X = c(Bit.KnoA = 4, Bit.KnoB = 1, Bit.KnoC = 2, ChandlerA = 3, Ellis.etal =4,
Mubarak=5, SheenA=6, Shin.Ellis=7 , Sun = 8, Trus.Hsu=3 ),
Y = c(Bit.KnoA = 6, Bit.KnoB = 3, Bit.KnoC = 4, Ellis.etal =1, Mubarak=2,
SheenA=1, Shin.Ellis=2 , Sun = 1),
Z = c(Bit.KnoB = 2) )
V[[1]] - V[[2]] - V[[3]] # all elements regardless of names are subtracted
【问题讨论】:
-
类似
i = intersect(names(V$X), intersect(names(V$Y), names(V$Z))); V$X[i] - (V$Y[i] + V$Z[i])? -
期望的输出是什么?
-
我会分三步进行:1. 将列表更改为数据框 X、Y、Z 2. 基于名称的内部连接 3. 进行减法。
-
@utubun 例如
Bit.KnoA出现在X和Y中,所以Bit.KnoA出现在X中-Bit.KnoA出现在Y中。或者Bit.KnoB出现在X、Y和Z中,所以Bit.KnoB在X-Bit.KnoB在Y-Bit.KnoB在Z。但ChandlerA只出现在X中,所以完全排除。 -
@utubun,我已经添加了我想要的输出。