【发布时间】:2021-08-09 15:37:04
【问题描述】:
我发现的大多数解决方案都是针对数据框或列表,而不是向量。
来自:
myvec = c(A=2, B=2, A=2)
到:
desiredvec = c(A=4, B=2)
【问题讨论】:
我发现的大多数解决方案都是针对数据框或列表,而不是向量。
来自:
myvec = c(A=2, B=2, A=2)
到:
desiredvec = c(A=4, B=2)
【问题讨论】:
您可以使用tapply
> tapply(myvec, names(myvec), sum)
A B
4 2
或xtabs
> xtabs(myvec~names(myvec))
names(myvec)
A B
4 2
【讨论】:
使用aggregate/stack
aggregate(values ~ ., stack(myvec), sum)
【讨论】:
您可以使用rowsum:
rowsum(myvec, names(myvec))
# [,1]
#A 4
#B 2
rowsum 返回一个矩阵。如果您需要矢量。
rowsum(myvec, names(myvec))[, 1]
#A B
#4 2
【讨论】:
splitbyitsnames <- function(namedVec) { # split a list by its names
stopif(is.null(names(namedVec)), message = "NO NAMES")
split(namedVec, f = names(namedVec))
}
unlapply <- function (...) { unlist(lapply(...)) } # lapply, then unlist
sumBySameName <- function(namedVec) { # Sum up vector elements with the same name
unlapply(splitbyitsnames(namedVec), sum)
}
> sumBySameName(myvec)
A B
4 2
如果有更好的解决方法请补充
【讨论】: