[英]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.