相关疑难解决方法(0)

如何在mutate(dplyr)中使用自定义函数?

我正在使用dplyr重写我的所有代码,并需要mutate/mutate_at函数的帮助.我需要的是将自定义函数应用于我的表中的两列.理想情况下,我会通过它们的索引来引用这些列,但现在我甚至无法通过名称引用它.

功能是:

binom.test.p <- function(x) {
  if (is.na(x[1])|is.na(x[2])|(x[1]+x[2])<10) {
    return(NA)
  } 
  else {
    return(binom.test(x, alternative="two.sided")$p.value)
  }
} 
Run Code Online (Sandbox Code Playgroud)

我的数据:

table <- data.frame(geneId=c("a", "b", "c", "d"), ref_SG1_E2_1_R1_Sum = c(10,20,10,15), alt_SG1_E2_1_R1_Sum = c(10,20,10,15))
Run Code Online (Sandbox Code Playgroud)

所以我这样做:

table %>%
  mutate(Ratio=binom.test.p(c(ref_SG1_E2_1_R1_Sum, alt_SG1_E2_1_R1_Sum)))
Error: incorrect length of 'x'
Run Code Online (Sandbox Code Playgroud)

如果我做:

table %>% 
mutate(Ratio=binom.test.p(ref_SG1_E2_1_R1_Sum, alt_SG1_E2_1_R1_Sum))
Error: unused argument (c(10, 20, 10, 15))
Run Code Online (Sandbox Code Playgroud)

第二个错误可能是因为我的函数需要一个向量而是获得两个参数.

但即使忘记了我的功能.这有效:

table %>%
  mutate(sum = ref_SG1_E2_1_R1_Sum + alt_SG1_E2_1_R1_Sum)
Run Code Online (Sandbox Code Playgroud)

这不是:

    table %>%
      mutate(.cols=c(2:3), .funs=funs(sum=sum(.)))
Error: wrong result size (2), expected 4 or 1
Run Code Online (Sandbox Code Playgroud)

所以这可能是我对dplyr如何工作的误解.

r dplyr mutate

8
推荐指数
2
解决办法
7087
查看次数

dplyr:将分组的小标题传递给自定义函数

(以下场景简化了我的实际情况)
我的数据来自村庄,我想通过一个村庄变量来总结一个结果变量。

> data
   village     A     Z      Y 
     <chr> <int> <int>   <dbl> 
 1       a     1     1   500     
 2       a     1     1   400     
 3       a     1     0   800  
 4       b     1     0   300  
 5       b     1     1   700  
Run Code Online (Sandbox Code Playgroud)

例如,我想计算YZ==z由村庄使用的平均值。在这种情况下,我希望村庄“a”为 (500 + 400)/2 = 450,村庄“b”为 700。

请注意,实际情况更复杂,我不能直接使用这个答案,但重点是我需要将分组的 tibble 和全局变量 (z) 传递给我的函数

z <- 1 # z takes 0 or 1
data %>%
    group_by(village) %>% # grouping by village
    summarize(Y_village = Y_hat_village(., z)) # pass …
Run Code Online (Sandbox Code Playgroud)

r dplyr

6
推荐指数
1
解决办法
1512
查看次数

分组data.fame后的自定义功能

给出以下data.frame

d <- rep(c("a", "b"), each=5)
l <- rep(1:5, 2) 
v <- 1:10

df       <- data.frame(d=d, l=l, v=v*v)
df
   d l   v
1  a 1   1
2  a 2   4
3  a 3   9
4  a 4  16
5  a 5  25
6  b 1  36
7  b 2  49
8  b 3  64
9  b 4  81
10 b 5 100
Run Code Online (Sandbox Code Playgroud)

现在我想在l分组之后添加另一列.额外列应包含v_b - v_a的值

   d l   v    e
1  a 1   1    35 (36-1)
2  a 2   4    45 …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

5
推荐指数
1
解决办法
7422
查看次数

标签 统计

dplyr ×3

r ×3

dataframe ×1

mutate ×1