我在R中有两个列表或向量:
vector 1
d1 d2 d3 d4
2 0.75 1 0.25 0
vector 2
[1] "1" "3"
我需要考虑vector2的值来添加向量1的值,我的意思是在我的例子中添加d1加d3的值,因为向量2具有那些索引。我正在考虑使用for循环来遍历向量2并添加vector1的值,但是不是其他更直接的方法来执行此操作?我记得它可以通过转换T,F值中的索引来使用,但坦率地说我完全不记得了。
答案 0 :(得分:2)
试试这个(结果没有顺序):
bool = gsub('d','',names(vector1)) %in% vector2
c(sum(vector1[bool]), vector1[!bool])
# d2 d4
# 1 1 0
答案 1 :(得分:2)
尝试:
sum(vector1[match(vector2, gsub("d", "", names(vector1)))])
[1] 1
答案 2 :(得分:1)
这是%in%
sum(v1[seq_along(v1) %in% v2])
# [1] 1
答案 3 :(得分:0)
在此示例中,vector2
似乎是一个字符类型,其中包含您要添加的vector1
位置索引的数字。在这种情况下,解决方案更容易:
> vector1 <- c(d1=0.75, d2=1, d3=0.25, d4=0)
> vector1
d1 d2 d3 d4
0.75 1.00 0.25 0.00
> vector2 <- c("1", "3")
> vector2
[1] "1" "3"
> sum(vector1[as.numeric(vector2)])
[1] 1
如果您想将其概括为data.frame
- 由您的&#34;向量1&#34;的布局建议。 rowname
2
> (df1 <- data.frame(d1=0:3, d2=10:13, d3=-1:2, d4=seq(.25, 1, .25)))
d1 d2 d3 d4
1 0 10 -1 0.25
2 1 11 0 0.50
3 2 12 1 0.75
4 3 13 2 1.00
> apply(df1, 1, function(x) sum(x[as.numeric(vector2)]))
[1] -1 1 3 5
,然后您可以使用以下方法将其应用于每一行:
{{1}}