在R中:如何在同一数据帧中减去/除以行

时间:2016-06-06 00:00:41

标签: r

我有一个数据框,假设它叫做my.data

1  Item   A   B   C
2  AAE    7   1   37
3  CCC    7   0   38
4  PPI    10  1   35

我想在名为"AAE" "AAA"的{​​{1}}下面创建一行,"AAE" - "CCC" - "PPI",例如,对于列A,我们有7-7-10 = -10,用于列B我们有1-0-1 = 0等。为了澄清,我的数据集要大得多,“CCC”和“PPI”不直接在“AAE”下

我该怎么做?

3 个答案:

答案 0 :(得分:3)

我可以使用Reduce以递归方式应用-来获取大部分内容

newrow <- c(Item="AAA", lapply(dat[dat$Item %in% c("AAE","CCC","PPI"),-1], Reduce, f=`-`))
rbind(dat[1,], newrow, dat[-1,])


#   Item   A B   C
#2   AAE   7 1  37
#21  AAA -10 0 -36
#3   CCC   7 0  38
#4   PPI  10 1  35

答案 1 :(得分:3)

另一种选择是首先转换data.frame,进行正常变异,然后将其转置回来。

library(dplyr)
`row.names<-`(df[,-1], df[,1]) %>% t %>%
              transform(AAA = AAE - CCC - PPI) %>% 
              t %>% data.frame

      A B   C
AAE   7 1  37
CCC   7 0  38
PPI  10 1  35
AAA -10 0 -36

答案 2 :(得分:0)

apply(my.data[,c("A","B","C")],2,function(x)Reduce("-",x))
  A   B   C 
-10   0 -36