【发布时间】:2016-07-31 01:47:12
【问题描述】:
对某些列应用函数rowwise 的dplyr 方法是什么。例如,我想抓取所有 V, 列并根据行总和将它们转换为百分比。我展示了如何在基地中做到这一点。在 dplyr 链中呢?很高兴也能以 data.table 的形式看到(尽管这里优先考虑 dplyr 解决方案)。
x <- data.frame(A=LETTERS[1:5], as.data.frame(matrix(sample(0:5, 25, T), ncol=5)))
data.frame(x[1], x[-1]/rowSums(x[-1]))
## A V1 V2 V3 V4 V5
## 1 A 0.1428571 0.2142857 0.2142857 0.35714286 0.07142857
## 2 B 0.2000000 0.2000000 0.1500000 0.20000000 0.25000000
## 3 C 0.3571429 0.2857143 0.0000000 0.07142857 0.28571429
## 4 D 0.1904762 0.2380952 0.1904762 0.23809524 0.14285714
## 5 E 0.2000000 0.2500000 0.1500000 0.25000000 0.15000000
library(dplyr)
props <- function(x) round(x/sum(x), 2)
# does not work
x %>%
rowwise()
mutate(props(matches("^.{2}$")))
【问题讨论】:
-
可能是
x %>% rowwise() %>% select(matches("^.{2}$")) %>% props %>% cbind(x[1], .)?下半场虽然不是真正的 dplyrey -
我不是 dplyr 专家,但你不能在 dplyr 中也使用
rowSums吗?像props <- function(x, y) round(x/y, 2) ; x %>% mutate(Total = rowSums(.[-1])) %>% mutate_each(funs(./Total), -c(A, Total))这样的东西。尽管rowSums和rowwise都应该是低效的。如果你没有NAs,我会选择Reduce(`+`, .[-1]))。 -
@DavidArenburg Nice 你能不能回答一下。它有效。
-
@Frank 真的不需要。我将删除,尽管它允许任何人只运行代码而无需键入库等来获取 dplyr。
-
SO dplyr 中 hadley 附近的“已知 data.table 人”回答排行榜 :) stackoverflow.com/tags/dplyr/topusers
标签: r data.table dplyr