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