r - 在一个函数中设置几个条件
问题描述
对于每个序列,我想在考虑 id 的同时获得 A/A0 和 B/B0 之间的差异。我做了一个函数来按序列运行它。但是我可以做些什么来改变函数中的trt?
rm(list=ls())
id <- rep(1:6, each=4)
trt <- c("A","A0","B","B0","B","B0","A","A0","A","A0","B","B0","B","B0","A","A0","A","A0","B","B0","B","B0","A","A0")
seq <- rep(rep(1:2,each=2),6)
set.seed(1)
q <- runif(24)
df <- data.frame(id,trt,seq,q)
df
id trt seq q
1 1 A 1 0.26550866
2 1 A0 1 0.37212390
3 1 B 2 0.57285336
4 1 B0 2 0.90820779
5 2 B 1 0.20168193
6 2 B0 1 0.89838968
7 2 A 2 0.94467527
8 2 A0 2 0.66079779
9 3 A 1 0.62911404
10 3 A0 1 0.06178627
11 3 B 2 0.20597457
12 3 B0 2 0.17655675
13 4 B 1 0.68702285
14 4 B0 1 0.38410372
15 4 A 2 0.76984142
16 4 A0 2 0.49769924
17 5 A 1 0.71761851
18 5 A0 1 0.99190609
19 5 B 2 0.38003518
20 5 B0 2 0.77744522
21 6 B 1 0.93470523
22 6 B0 1 0.21214252
23 6 A 2 0.65167377
24 6 A0 2 0.12555510
test <- function(i) {
df1 <- df[df$seq==i,]
dfA <- df1[df1$trt %in% c("A", "A0"),]
dfA <- dfA[,c(1,2,4)]
library(tidyr)
colnames(dfA)
dfA <- spread(dfA,trt,q)
dfA <- c(dfA[,2]-dfA[,3])
return(dfA)
}
test(1)
test(2)
我在想这样的事情,但它不起作用
test <- function(i,df$trt[m],df$trt[n]) {
df1 <- df[df$seq==i,]
dfA <- df1[df1$trt %in% c(m, n),]
dfA <- dfA[,c(1,2,4)]
library(tidyr)
colnames(dfA)
dfA <- spread(dfA,trt,q)
dfA <- c(dfA[,2]-dfA[,3])
return(dfA)
}
test(1,2,3)
解决方案
我们可以通过和arrange
的数据,因此之后和 相同,并计算差异。id
trt
A0
A
B
group_by
id
seq
library(dplyr)
df %>% arrange(id, trt) %>% group_by(id, seq) %>% summarise(q = diff(q))
推荐阅读
- kentico - Kentico - 更新 CMS_USER 表列
- python-3.x - 我使用 python3 和 pyautogui 的自动点击器不起作用
- python - 生成一个随机浮点数组,总和为 1,同时在 python 中修复一些元素(上限、下限和/或固定),
- python - bs4等python库不工作时如何抓取动态网页?
- python - (Pandas) 使用 apply 一次为多列设置值
- audio - 如果视频轨道在流中静音,则不会播放音频
- javascript - 带有 Flask 的 Firebase 身份验证 JS
- frida - Frida - android11 挂钩提供程序失败
- java - Mule 4 java类调用
- javascript - 将查询作为参数传递以表示