簡體   English   中英

如何根據 R 中另一列的值計算一列中最常見的變量?

[英]How to calculated the most common variable from one column based on values from another column in R?

我有一個 dataframe,看起來像這樣:

 plot sp value sum
1  A  1a  1    3   
2  A  1b  1    3
3  A  1a  1    3
4  B  1a  2    4
5  B  1a  2    4
6  C  1b  3    9
7  C  1b  3    9
8  C  1b  3    9

然后我計算了每一行的sum份額並得到了這個:

 plot sp value sum share
1  A  1a  1    3    0.3
2  A  1b  1    3    0.3
3  A  1a  1    3    0.3
4  B  1a  2    4    0.5
5  B  1a  2    4    0.5
6  C  1b  3    9    0.3
7  C  1b  3    9    0.3
8  C  1b  3    9    0.3

我現在想知道基於share的每個plot最常見的sp是什么。 在這個例子中,我希望它看起來像這樣:

 plot sp value sum share dom.sp
1  A  1a  1    3    0.3    1a
2  A  1b  1    3    0.3    1a
3  A  1a  1    3    0.3    1a
4  B  1a  2    4    0.5    1a
5  B  1a  2    4    0.5    1a
6  C  1b  3    9    0.3    1b
7  C  1b  3    9    0.3    1b
8  C  1b  3    9    0.3    1b

與您之前的問題非常相似的解決方案

> ave(df$sp,df$plot,FUN=function(x){names(table(x))[1]})
[1] "1a" "1a" "1a" "1a" "1a" "1b" "1b" "1b"

如果我理解正確,這可能會起作用:

library(dplyr)

df <-
structure(list(account = c("M205109", "M205109", "M201212", "M205668", 
"M207954", "M208966", "M203465", "M207622", "M201869", "M201869"
), age = c(20, 20, 18, 29, 21, 19, 19, 23, 22, 22)), class = "data.frame", row.names = c(NA, 
-10L))

df %>% 
  group_by(plot) %>% 
  mutate(dom.sp = relper::cat_mode(sp))

# A tibble: 8 x 5
# Groups:   plot [3]
  plot  sp      sum share dom.sp
  <chr> <chr> <dbl> <dbl> <chr> 
1 A     1a        3   0.3 1a    
2 A     1b        3   0.3 1a    
3 A     1a        3   0.3 1a    
4 B     1a        4   0.5 1a    
5 B     1a        4   0.5 1a    
6 C     1b        9   0.3 1b    
7 C     1b        9   0.3 1b    
8 C     1b        9   0.3 1b   

我使用了一個名為cat_mode的 function 來獲取變量的模式,如果你想嘗試,這里是 package:

remotes::install_github("vbfelix/relper")

暫無
暫無

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

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