我希望在组之间折叠多个列,以便剩余的摘要统计信息是每个组的列值之间的差异。我有两种方法,但我觉得有一种更好的方法可以做到这一点。
示例数据
library(dplyr)
library(tidyr)
test <- data.frame(year = rep(2010:2011, each = 2),
id = c("A","B"),
val = 1:4,
val2 = 2:5,
stringsAsFactors = F)
使用summarize_each
test %>%
group_by(year) %>%
summarize_each(funs(.[id == "B"] - .[id == "A"]), val, val2)
使用tidyr
test %>%
gather(key,val,val:val2) %>%
spread(id,val) %>%
mutate(B.less.A = B - A) %>%
select(-c(A,B)) %>%
spread(key,B.less.A)
总结_each方式似乎相对简单,但我觉得有一种方法可以通过分组id某种方式来做到这一点?有没有办法可以忽略列中的NA值?
答案 0 :(得分:0)
我们可以使用data.table
library(data.table)
setDT(test)[, lapply(.SD, diff), by = year, .SDcols = val:val2]
# year val val2
#1: 2010 1 1
#2: 2011 1 1