gpt4 book ai didi

r - 减去R中向量列表中类似命名的元素

转载 作者:行者123 更新时间:2023-12-02 00:11:05 24 4
gpt4 key购买 nike

我有一个包含 3 个向量的列表:XYZ。我想减去这 3 个向量的名称相似元素。也就是说,类似命名的元素在整个过程中被减去:X - Y - Z

此外,如果某个元素(此处为 X 中的 ChandlerATrus.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

最佳答案

我们可以使用aggregateReduce更紧凑地做到这一点

with(aggregate(values ~ ind, subset(do.call(rbind, lapply(V, stack)), 
ind %in% names(which(table(ind) > 1))),
FUN = function(x) Reduce(`-`, x)), setNames(values, ind))
# Bit.KnoA Bit.KnoB Bit.KnoC Ellis.etal Mubarak SheenA Shin.Ellis Sun
# -2 -4 -2 3 3 5 5 7
<小时/>

或使用tidyverse

library(tidyverse)
map_df(V, enframe) %>%
group_by(name) %>%
filter(n() > 1) %>%
summarise(value = reduce(value, `-`)) %>%
deframe
# Bit.KnoA Bit.KnoB Bit.KnoC Ellis.etal Mubarak SheenA Shin.Ellis Sun
# -2 -4 -2 3 3 5 5 7

关于r - 减去R中向量列表中类似命名的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57383680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com