我有一个数据表dt,其中我想做列减法。我想输出一个新的数据表dt_op,其中,
dt <- acast(raw, a~b, value.var="z")
dt_op[1, 1] <- dt[1, 2] - dt[1, 1]
dt_op[1, 2] <- dt[1, 3] - dt[1, 1]
dt_op[1, 3] <- dt[1, 4] - dt[1, 1]
dt_op[1, 4] <- dt[1, 5] - dt[1, 1]
dt_op[1, 5] <- dt[1, 7] - dt[1, 6]
dt_op[1, 6] <- dt[1, 8] - dt[1, 7]
我想从1中减去2,3,4,5列,然后从6中减去第7,8,9,10列,依此类推。
我已尝试使用循环,但这很慢且不合适。
temp <- function(r) {
i = 1
l = length(r)
op <- list()
for(j in 2:l) {
op[[j-1]] <- r[j] - r[i]
if (j -i == 4) {
j = j + 2
i = i + 5
}
}
return(op)
}
我通过在数据表上应用来调用它。如何正确地做到这一点?
答案 0 :(得分:-2)
以下是使用重塑
的简短示例library(dplyr)
library(tidyr)
df = data_frame(`1` = c(1, 2), `2` = c(2, 3), `3` = c(3, 4))
df %>%
gather(variable, value, 2:3) %>%
mutate(value = value - `1`) %>%
spread(variable, value)