首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在dataframe中跨行应用函数

在dataframe中跨行应用函数
EN

Stack Overflow用户
提问于 2021-03-22 05:17:11
回答 1查看 16关注 0票数 0

我有一个5种鸟类的大致计数的数据集。我写了一个函数,用布鲁利指数计算物种的多样性。我的数据是这样的,我的函数是这样写的:

代码语言:javascript
复制
df <- data.frame(
sp1 = c(2, 3, 4, 5),         
sp2 = c(1, 6, 7, 2),
sp3 = c(1, 9, 4, 3),
sp4 = c(2, 2, 2, 4),
sp5 = c(3, 3, 2, 1),
treatment1 = c("A", "B", "C", "A"),
treatment2 = c("D", "E", "D", "E")
)

#write function that estimates Broullion's Index
Brillouin_Index <- function(x){  
  N <- sum(x)
 (log10(factorial(N)) - sum(log10(factorial(x)))) / N
}

df2 <- df %>%
   mutate(bindex = Brillon_Index(matrix(df[1:5,])

如何应用我的函数来计算各行的布鲁利奥斯指数?我以为像上面这样的东西会起作用,但还没有运气。重点是使用多样性指数作为与处理1和2相关的响应变量,这就是为什么我希望对各行求和,并为名为bindex的新变量获得每行的单个值。任何帮助都将不胜感激。最好的

EN

回答 1

Stack Overflow用户

发布于 2021-03-22 05:19:50

我们可以使用rowwise按行分组

代码语言:javascript
复制
library(dplyr)
df <- df %>% 
  rowwise %>%
  mutate(bindex = Brillouin_Index(as.matrix(c_across(1:5)))) %>%
  ungroup

-output

代码语言:javascript
复制
df
# A tibble: 4 x 8
#    sp1   sp2   sp3   sp4   sp5 treatment1 treatment2 bindex
#  <dbl> <dbl> <dbl> <dbl> <dbl> <chr>      <chr>       <dbl>
#1     2     1     1     2     3 A          D           0.464
#2     3     6     9     2     3 B          E           0.528
#3     4     7     4     2     2 C          D           0.527
#4     5     2     3     4     1 A          E           0.505

或者在base R中使用apply

代码语言:javascript
复制
df$bindex <- apply(df[1:5], 1, Brillouin_Index)
df$bindex
#[1] 0.4643946 0.5277420 0.5273780 0.5051951

或者在collapse中使用dapply

代码语言:javascript
复制
library(collapse
df$bindex <- dapply(slt(df, 1:4), Brillouin_Index, MARGIN = 1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66737644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档