簡體   English   中英

是否有R函數可在矩陣中建立索引?

[英]Is there an R function for indexing in a matrix?

在R中,我有兩個矩陣A和B。每個矩陣都有兩列和40,000多行。 如果矩陣A具有(x,y)並且矩陣B具有(y,z),我想制作一個具有(x,z)的新矩陣C。

例如,

> 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

比我想要一個像下面的矩陣

> C
   UserID Score
 1    3    100
 2    1    350
 3    2    200

,但如果我認為這是費時。 是否有適用的功能? 創建像C這樣的新矩陣的最有效方法是什么?

*事先,當姓名相同時,我想輸入分數的中位數。 有什么幫助嗎?

設置數據:

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列,但如果您確定所有內容都正確匹配,但是merge更安全,則可以使用cbind()

如果您想一次匯總幾個“分數”列:

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()一次聚合多個列,但是如果要聚合的變量很多,這很尷尬)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM