我觉得这个问题很有意思: Transition matrix
因此,按照他的设置,假设我在每行添加一个权重(xt2):
<fetch mapping="logical" version="1.0">
<entity name="UoM">
<attribute name="UoMId" />
<attribute name="BaseUoM" />
<attribute name="UoMScheduleId" />
<attribute name="Name" />
<attribute name="Quantity" />
<link-entity name="UoM" from="UoMScheduleId" to="UoMScheduleId" alias="t2" link-type="inner">
<filter>
<condition attribute="UoMId" operator="eq" value="57E59AB7-AC8F-E511-80F0-005056BE36DF" />
</filter>
</link-entity>
</entity>
</fetch>
QueryExpression query = new QueryExpression("uom");
query.ColumnSet = new ColumnSet(new[] { "uomid", "baseuom", "uomscheduleid", "name", "quantity", });
query.LinkEntities.Add(new LinkEntity("uom", "uom", "uomscheduleid", "uomscheduleid", JoinOperator.Inner) { EntityAlias = "t2" });
query.Criteria.AddCondition("t2", "uomid", ConditionOperator.Equal, guidID);
EntityCollection result = OrganizationService.RetrieveMultiple(query);
使用该帖子中的答案,我们得到了转换矩阵:
>df = data.frame(cusip = paste("A", 1:10, sep = ""), xt = c(1,2,3,2,3,5,2,4,5,5), xt1 = c(1,4,2,1,1,4,2,2,2,2),xt2=c(1:10));df
cusip xt xt1 xt2
1 A1 1 1 1
2 A2 2 4 2
3 A3 3 2 3
4 A4 2 1 4
5 A5 3 1 5
6 A6 5 4 6
7 A7 2 2 7
8 A8 4 2 8
9 A9 5 2 9
10 A10 5 2 10
但是,如果我想计算res <- with(df, table(xt, xt1))
xt1
xt 1 2 4
1 1 0 0
2 1 1 1
3 1 1 0
4 0 1 0
5 0 2 1
result <- res/rowSums(res) ;a
xt1
xt 1 2 4
1 1.0000000 0.0000000 0.0000000
2 0.3333333 0.3333333 0.3333333
3 0.5000000 0.5000000 0.0000000
4 0.0000000 1.0000000 0.0000000
5 0.0000000 0.6666667 0.3333333
列加权的转换矩阵怎么办?也就是说,当我们生成xt2
时,我们不仅仅计算状态变化的频率,而是使用实际数字(权重)。例如,res
应为4,res[2,1]
应为9 + 10 = 19。
因此,想要的新res[5,2]
应如下所示:
res
然后,我们可以使用上面相同的代码计算 xt1
xt 1 2 4
1 1 0 0
2 4 7 2
3 5 3 0
4 0 8 0
5 0 19 6
。
我怎样才能实现result
?谢谢。
P.S。,或者还有其他方法来“加权”过渡矩阵吗?
答案 0 :(得分:2)
我们可以使用xtabs
。使用公式方法,我们在~
的rhs上指定交叉分类变量,并在lhs上指定计数向量。默认情况下,它会执行sum
xtabs(xt2~xt+xt1, df)
# xt1
#xt 1 2 4
# 1 1 0 0
# 2 4 7 2
# 3 5 3 0
# 4 0 8 0
# 5 0 19 6
或者tapply
,我们按&#39; xt&#39;,&#39; xt1&#39;并将FUN
指定为sum
。对于那些没有组合的元素,它会给出NA
,如果需要可以替换为0.
with(df, tapply(xt2, list(xt, xt1), FUN=sum))
或者我们可以使用acast
中的reshape2
。我们从长期&#39;重塑。广泛的&#39;通过指定公式和value.var
列。
library(reshape2)
acast(df, xt~xt1, value.var='xt2', sum)