想象一下以下格式的 df:
ID1 ID2
1 A 1
2 A 2
3 A 3
4 A 4
5 A 5
6 B 1
7 B 2
8 B 3
9 B 4
10 B 5
11 C 1
12 C 2
13 C 3
14 C 4
15 C 5
Run Code Online (Sandbox Code Playgroud)
问题是为 ID1 中的第一个唯一值随机选择一行(最好调整为 n 行),从数据集中删除相应的 ID2 值,从剩余的 ID2 值池中随机选择一个值作为第二个 ID1 值(即递归),等等。
因此,例如,对于第一个 ID1 值,它将执行sample(1:5, 1),结果为 2。对于第二个 ID1 值,它将执行sample(c(1, 3:5), 1),结果为 3。对于第三个 ID1 值,它将执行sample(c(1, 4:5), 1),结果为 …
假设数据集每个 ID 包含多行,多列包含一些存储为字符串的代码:
df <- data.frame(id = rep(1:3, each = 2),
var1 = c("X1", "Y1", "Y2", "Y3", "Z1", "Z2"),
var2 = c("Y1", "X2", "Y2", "Y3", "Z1", "Z2"),
var3 = c("Y1", "Y2", "X1", "Y3", "Z1", "Z2"),
stringsAsFactors = FALSE)
id var1 var2 var3
1 1 X1 Y1 Y1
2 1 Y1 X2 Y2
3 2 Y2 Y2 X1
4 2 Y3 Y3 Y3
5 3 Z1 Z1 Z1
6 3 Z2 Z2 Z2
Run Code Online (Sandbox Code Playgroud)
现在,假设我想过滤掉X在任何相关列中具有特定代码(此处)的所有 ID 。使用dplyrand purrr …
我怀疑这个问题可能是重复的,但是,我发现没有什么令人满意的。想象一个具有如下结构的简单数据集:
set.seed(123)
df <- data.frame(cov_a = rbinom(100, 1, prob = 0.5),
cov_b = rbinom(100, 1, prob = 0.5),
cont_a = runif(100),
cont_b = runif(100),
dep = runif(100))
cov_a cov_b cont_a cont_b dep
1 0 1 0.238726027 0.784575267 0.9860542973
2 1 0 0.962358936 0.009429905 0.1370674714
3 0 0 0.601365726 0.779065883 0.9053095817
4 1 1 0.515029727 0.729390652 0.5763018376
5 1 0 0.402573342 0.630131853 0.3954488591
6 0 1 0.880246541 0.480910830 0.4498024841
7 1 1 0.364091865 0.156636851 0.7065019011
8 1 1 0.288239281 0.008215520 0.0825027458 …Run Code Online (Sandbox Code Playgroud) 我在R中有一个包含拟南芥中旁系同源基因的数据框,看起来像这样:
gene_x gene_y
AT1 AT2
AT3 AT4
AT1 AT2
AT1 AT3
AT2 AT1
Run Code Online (Sandbox Code Playgroud)
与'ATx'对应的基因名称.
现在,对于下游分析,我希望仅继续使用唯一对.有些对只是简单的重复,可以在使用该duplicated()功能时轻松删除.但是,上面的人工数据框中的第五行也是重复的,但是按相反的顺序,并且不会被函数拾取duplicated(),也不会被unique()函数拾取.
有关如何删除这些行的任何想法?
假设一个数据集包含每个多个时间段和每个多个组的计数数据,格式如下:
set.seed(123)
df <- data.frame(group = as.factor(rep(1:3, each = 50)),
week = rep(1:50, 3),
rate = c(round(700 - rnorm(50, 100, 10) - 1:50 * 2, 0),
round(1000 - rnorm(50, 200, 10) - 1:50 * 2, 0),
round(1000 - rnorm(50, 200, 10) - 1:50 * 2, 0)))
group week rate
1 1 1 604
2 1 2 598
3 1 3 578
4 1 4 591
5 1 5 589
6 1 6 571
7 1 7 581
8 1 8 …Run Code Online (Sandbox Code Playgroud) 假设这样的数据结构:
ID testA_wave1 testA_wave2 testA_wave3 testB_wave1 testB_wave2 testB_wave3
1 1 3 2 3 6 5 3
2 2 4 4 4 3 6 6
3 3 10 2 1 4 4 4
4 4 5 3 12 2 7 4
5 5 5 3 9 2 4 2
6 6 10 0 2 6 6 5
7 7 6 8 4 6 8 3
8 8 1 5 4 5 6 0
9 9 3 2 7 8 4 4 …Run Code Online (Sandbox Code Playgroud) 我有一个数据集,其中有成组的个人决策。对于每个人,我需要他/她的小组成员的所有决定的汇总(即总和)。所以说数据看起来像:
set.seed(123)
group_id <- c(sapply(seq(1, 3), rep, times = 3))
person_id <- rep(seq(1,3),3)
decision <- sample(1:10, 9, replace=T)
df <-data.frame(group_id, person_id, decision)
df
Run Code Online (Sandbox Code Playgroud)
结果是:
group_id person_id decision
1 1 1 3
2 1 2 8
3 1 3 5
4 2 1 9
5 2 2 10
6 2 3 1
7 3 1 6
8 3 2 9
9 3 3 6
Run Code Online (Sandbox Code Playgroud)
我需要产生这样的东西:
group_id person_id decision others_decision
1 1 1 3 13
2 1 2 8 8
3 1 …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的数据集:
before = data.frame(diag1 = c(1,NA, 1, NA, NA, 1), diag2 = c(NA, NA, NA, 2, NA, NA), diag3 = c(3, NA, NA, NA, 3, 3), diag4 = c(4, 4, NA, NA, 4, NA))
diag1 diag2 diag3 diag4
1 1 NA 3 4
2 NA NA NA 4
3 1 NA NA NA
4 NA 2 NA NA
5 NA NA 3 4
6 1 NA 3 NA
Run Code Online (Sandbox Code Playgroud)
我一直在尝试寻找一种解决方案,其中最终结果是一个新列,名为“ diagnoses”,看起来像这样
diagnoses
1 1,3,4
2 4
3 1
4 2
5 …Run Code Online (Sandbox Code Playgroud) 我试图将观察的 df 减少到单个观察(单行)。我想 summarise_if 是带有均值的数字,而 if 是带有模式的字符串或因子。下面的代码不起作用,但我希望它给出了想法。谢谢!
#data frame
num <- c(1:7)
str <- c("toy","control","play",NA,"give","toy","toy")
df_finale <- data.frame(num,str)
#mode function
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
#df reduction
df_finale <- df_finale %>%
summarize_if(is.numeric, mean, na.rm = TRUE) %>%
summarize_else_if(!is.numeric, Mode)
Run Code Online (Sandbox Code Playgroud) 这个问题是我之前关于递归随机采样高效递归随机采样问题的后续问题。当组大小相同或每组需要固定数量的样本时,该线程中的解决方案可以正常工作。然而,让我们想象一个数据集如下:
ID1 ID2
1 A 1
2 A 6
3 B 1
4 B 2
5 B 3
6 C 4
7 C 5
8 C 6
9 D 6
10 D 7
11 D 8
12 D 9
Run Code Online (Sandbox Code Playgroud)
我们想要为每个 ID1 随机采样最多 n 个ID2,并递归地执行此操作。这里的递归意味着我们从第一个 ID1 移动到最后一个 ID1,如果 ID2 已经被采样为 ID1,那么它不应该用于后续的 ID1。假设n = 2,那么预期结果如下;
ID1 ID2
1 A 1
2 A 6
4 B 2
5 B 3
6 C 4
7 C …Run Code Online (Sandbox Code Playgroud)