我想要计算mean(或任何其他摘要长度之一,例如统计min,max,length,sum)的数值变量("值")的分组变量("基团")的每个水平内.
摘要统计应该被分配到具有一个新的变量相同的长度为原始数据.即,原始数据中的每一行应该具有对应于当前组值的值-该数据组应该不被折叠,以便每组中的一行.例如,考虑组mean:
之前
id group value
1 a 10
2 a 20
3 b 100
4 b 200
Run Code Online (Sandbox Code Playgroud)
后
id group value grp.mean.values
1 a 10 15
2 a 20 15
3 b 100 150
4 b 200 150
Run Code Online (Sandbox Code Playgroud) Stata有一个非常好的命令,egen这使得计算观察组的统计数据变得容易.例如,可以计算每个组的最大值,平均值和最小值,并将它们作为变量添加到详细数据集中.Stata命令是一行代码:
by group : egen max = max(x)
Run Code Online (Sandbox Code Playgroud)
我从来没有summarise在dplyr包中找到相同的命令,这使得计算每个组的统计数据变得容易,但是我必须运行一个循环来将统计数据与每个观察结果相关联:
library("dplyr")
N <- 1000
tf <- data.frame(group = sample(1:100, size = N, replace = TRUE), x = rnorm(N))
table(tf$group)
mtf <- summarise(group_by(tbl_df(tf), group), max = max(x))
tf$max <- NA
for (i in 1:nrow(mtf)) {
tf$max[tf$group == mtf$group[i]] <- mtf$max[i]
}
Run Code Online (Sandbox Code Playgroud)
有没有人有更好的解决方案?
我想使用 R 在我的数据集中创建一个新列,其中包含每个唯一组的最大值。我的数据如下所示:
group<-c("A","A","A","A","A","B","B","C","C","C")
replicate<-c(1,2,3,4,5,1,2,1,2,3)
x<-data.frame(cbind(group,replicate))
Run Code Online (Sandbox Code Playgroud)
我想创建如下所示的第三列 - 每组的最大值。
group replicate max.per.group
A 1 5
A 2 5
A 3 5
A 4 5
A 5 5
B 1 2
B 2 2
C 1 3
C 2 3
C 3 3
Run Code Online (Sandbox Code Playgroud) 我正在处理具有数千行和多列的巨大数据集。我想使用 Dplyr 查找列中组的最大值,并在同一表的另一列中改变结果。这是我的数据的示例:
df <- tibble(a = rep(letters[1:3], each = 3), b = seq(0.1,0.9, length.out = 9))
Run Code Online (Sandbox Code Playgroud)
我想找到每组列中的最大值a。我知道我可以使用以下代码在表中的每个组中显示最大值:
df %>% group_by(a) %>% summarise_all(list(~ max(.)))
Run Code Online (Sandbox Code Playgroud)
其产生:
# A tibble: 3 x 2
a b
<chr> <dbl>
1 a 0.2
2 b 0.5
3 c 0.8
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的。我想要一个保留原始数据的表,但有一个附加列,c以便列中的每个值在b列中都有相应的值c,该值显示列中每个数据点所属的每个组中的最大值b。我想要的期望结果如下:
# A tibble: 9 x 3
a b c
<chr> <dbl> <dbl>
1 a 0.1 0.3
2 a 0.2 0.3
3 a 0.3 0.3
4 …Run Code Online (Sandbox Code Playgroud) 我有一个包含 34 列和 12,964 行的数据框,其中两列是 Gene.Name 和 Mutation_Frequency。例如:
| 基因名称 | Mutation_Frequency |
|---|---|
| CTLA4 | 0 |
| TP53 | 4 |
| CTLA4 | 2 |
| CTLA4 | 2 |
| TP53 | 4 |
| TP53 | 6 |
我现在想创建一个名为“Highest_Mutation_Frequency”的列,它告诉我 Gene.Name 的最高突变频率,并将其放在一个新列中,如下所示:
| 基因名称 | Mutation_Frequency | Highest_Mutation_Frequency |
|---|---|---|
| CTLA4 | 0 | 2 |
| TP53 | 4 | 6 |
| CTLA4 | 2 | 2 |
| CTLA4 | 2 | 2 |
| TP53 | 0 | 6 |
| TP53 | 6 | 6 |
我意识到我可能可以使用 max() 命令,但我不确定如何实现它。与往常一样,任何帮助表示赞赏!
编辑:虽然这与另一个问题非常相似: 选择每组中具有最大值的行 这个问题还涉及生成唯一的行并将它们放置在另一个数据框中。