是否有R函数用于矩阵中的索引?

时间:2015-08-24 05:13:49

标签: r matrix vector indexing match

在R中,我有两个矩阵A& B.每个矩阵有两列,超过40,000行。如果矩阵A有(x,y)而矩阵B有(y,z),我想制作一个有(x,z)的新矩阵C.

例如,

<td><input type="checkbox" <?php echo $row->IsActive==1) ? "checked": '' ;?> name="status" id="status"/></td>

我想要一个像下面这样的矩阵

> A
   UserID Name
 1    1    a
 2    2    b
 3    3    c
 4    4    a

> B
   Name Score
 1   c   100
 2   a   300
 3   b   200
 4   a   400

我使用代表 if ,但我觉得这很耗时。 是否有适合它的功能?创建像C这样的新矩阵的最有效方法是什么?

*事先,当名字相同时,我想把他们得分的中位数值。  对此有何帮助?

1 个答案:

答案 0 :(得分:1)

设置数据:

A <- read.table(header=TRUE,
text="UserID Name
1    a
2    b
3    c
4    a")

B <- read.table(header=TRUE,
text="Name Score
c   100
a   300
b   200
a   400")

使用每个名称的第一个用户ID聚合数据以使用中位数和用户ID替换得分:

B2 <- aggregate(Score~Name,B,median)
A2 <- aggregate(UserID~Name,A,head,1)

现在merge

merge(A2,B2)

##  Name UserID Score
##1    a      1   350
##2    b      2   200
##3    c      3   100

这些不是相同的顺序并且保留Name列,但不是您要求的... cbind()如果您确定所有内容都正确匹配,也可以使用merge但是B3 <- read.table(header=TRUE, text="Name Score1 Score2 Score3 c 100 200 1 a 300 23 7 b 200 94 6 a 400 20 2") 更安全。

如果您想一次汇总几个分数列:

B4 <- aggregate(B3[,-1],by=list(B3$Name),median)
names(B4)[1] <- "Name"
##   Name Score1 Score2 Score3
## 1    a    350   21.5    4.5
## 2    b    200   94.0    6.0
## 3    c    100  200.0    1.0

你可以尝试

?aggregate

(请参阅cbind():有一个公式界面可以同时使用img汇总多个列,但如果您要汇总多个变量,那么它很尴尬)