簡體   English   中英

矩陣r中的元素計數

[英]Counting elements in a matrix r

還有一個問題要問你。 如何自動從起始位置創建數據框“結果”。

例如:我必須選擇其中包含元素“ E3”的每一行,並匯總相應的編號。

我想要一個類似我的數據框“結果”的結果。 E3-> 100 + 200 + 300 = 600

#starting position
v1 <- c("E1","E2","E3")
v2 <- c("E2","E3",NA)
v3 <- c("E3","E5",NA)
number <- c(100, 200, 300)
test <- data.frame(cbind(v1,v2,v3,number))

#result
index <- c("E1","E2","E3","E5")
total <- c(100, 300, 600, 300)
result <- data.frame(cbind(index,total))

謝謝 :)

嘗試這個:

library(tidyverse)
test %>% 
  gather(key = "col", value = "val", -number) %>% 
  group_by(val) %>% 
  summarise_if(is.numeric, sum)


# A tibble: 5 x 2
  val   number
  <chr>  <dbl>
1 E1      100.
2 E2      300.
3 E3      600.
4 E5      200.
5 NA      600.

這是一個以R為底的解決方案:

M <- cbind(v1=c("E1","E2","E3"),
           v2=c("E2","E3",NA),
           v3=c("E3","E5",NA))
number <- c(100, 200, 300)

index <- c("E1","E2","E3","E5")
sapply(index, function(x) sum(number[apply(M==x, 1, any)], na.rm=TRUE))
# > sapply(index, function(x) sum(number[apply(M==x, 1, any)], na.rm=TRUE))
#  E1  E2  E3  E5 
# 100 300 600 200 

我們可以使用base R aggregate

aggregate(total ~., data.frame(index = unlist(test[1:3]), 
       total = rep(test$number, each = 3)), sum, na.rm = TRUE)
#   index total
#1    E1   100
#2    E2   300
#3    E3   600
#4    E5   300

數據

test <- data.frame(v1,v2,v3,number)

暫無
暫無

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

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