Kon*_*lph 10 r summarization dplyr
我有以下格式的数据:
gen = function () sample.int(10, replace = TRUE)
x = data.frame(A = gen(), C = gen(), G = gen(), T = gen())
Run Code Online (Sandbox Code Playgroud)
我现在想要在每行中附加行中所有元素的总和(我的实际函数更复杂,但sum说明了问题).
没有dplyr,我会写
cbind(x, Sum = apply(x, 1, sum))
Run Code Online (Sandbox Code Playgroud)
导致:
A C G T Sum
1 3 1 6 9 19
2 3 4 3 3 13
3 3 1 10 5 19
4 7 2 1 6 16
…
Run Code Online (Sandbox Code Playgroud)
但用dplyr做这件事似乎很难.
我试过了
x %>% rowwise() %>% mutate(Sum = sum(A : T))
Run Code Online (Sandbox Code Playgroud)
但结果不是每一行的总和,这是意想不到的东西,(对我来说)莫名其妙.
我也试过了
x %>% rowwise() %>% mutate(Sum = sum(.))
Run Code Online (Sandbox Code Playgroud)
但在这里,.它只是整个 占位符x.毫无疑问,不提供任何论据也不起作用(结果都是如此0).毋庸置疑,这些变体都没有rowwise().
(在dplyr中没有任何理由必须这样做,但是(a)我希望尽可能保持我的代码统一,并且在不同的API之间跳转没有帮助;并且(b)我希望有一天在dplyr中获得这些命令的自动和自由并行化.)
我曾经做过类似的事情,到那时我最终得到了:
x %>%
rowwise() %>%
do(data.frame(., res = sum(unlist(.))))
# A C G T res
# 1 3 2 8 6 19
# 2 6 1 7 10 24
# 3 4 8 6 7 25
# 4 6 4 7 8 25
# 5 6 10 7 2 25
# 6 7 1 2 2 12
# 7 5 4 8 5 22
# 8 9 2 3 2 16
# 9 3 4 7 6 20
# 10 7 5 3 9 24
Run Code Online (Sandbox Code Playgroud)
也许你的更复杂的功能可以正常工作unlist,但似乎它是必要的sum.因为.引用"当前组",我最初认为,.例如机器中的第一行rowwise对应于x[1, ],这是一个列表,sum在外面快乐地吞下do
is.list((x[1, ]))
# [1] TRUE
sum(x[1, ])
# [1] 19
Run Code Online (Sandbox Code Playgroud)
但是,如果没有unlist在do一个错误的产生,我不知道为什么:
x %>%
rowwise() %>%
do(data.frame(., res = sum(.)))
# Error in sum(.) : invalid 'type' (list) of argument
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1830 次 |
| 最近记录: |