我有一个数据变量X,我已经完成了以下
Xnew = split(X$col1,list(X$col3,X$col4))
S = sapply(Xnew,mean)
我现在有一个向量,其中每个元素都可以通过
访问S['SomeValCol3.SomeValCol4']
现在我想创建一个包含列等于col3中唯一值数的向量,其中col4作为索引每个值的列向量添加。也就是说,
Col4 | COL3 [1] | Col3 [2] | .... COL4 [0] | S [' SomeValCol3.SomeValCol4'] | ... 。 。
等等。
举一个例子,我可以说我有以下的载体
S['v31.v41'] = 0.5
S['v32.v41'] = 0.25
S['v33.v41'] = 0.35
S['v31.v42'] = 0.5
S['v32.v42'] = 0.25
S['v33.v42'] = 0.35
S['v31.v43'] = 0.5
S['v32.v43'] = 0.25
S['v33.v43'] = 0.35
我从分裂得到了然后我想要这个矩阵
V4 | V31 | V32 | V33
V41 0.5 0.25 035
V42 0.5 0.25 035
V43 0.5 0.25 035
答案 0 :(得分:2)
使用base R
xtabs(values~V1+V2, transform(stack(S), V2=sub('\\..*', '', ind),
V1=sub('.*\\.', '', ind)))
# V2
#V1 v31 v32 v33
# v41 0.50 0.25 0.35
# v42 0.50 0.25 0.35
# v43 0.50 0.25 0.35
S <- structure(c(0.5, 0.25, 0.35, 0.5, 0.25, 0.35, 0.5, 0.25, 0.35
), .Names = c("v31.v41", "v32.v41", "v33.v41", "v31.v42", "v32.v42",
"v33.v42", "v31.v43", "v32.v43", "v33.v43"))
答案 1 :(得分:1)
使用 reshape2 库我首先将向量S融合到data.frame并添加行/列变量名称
library(reshape2)
S.melted <- melt(S)
S.melted$v1 <- gsub('\\.v[[:digit:]]+', '', rownames(S.melted))
S.melted$v2 <- gsub('\\v[[:digit:]]+\\.', '', rownames(S.melted))
给了我S.melted格式如下:
value v1 v2
v31.v41 0.50 v31 v41
v32.v41 0.25 v32 v41
...
然后使用 acast
获取首选格式> acast(S.melted, v1 ~ v2)
v41 v42 v43
v31 0.50 0.50 0.50
v32 0.25 0.25 0.25
v33 0.35 0.35 0.35