我有一个数据框架,比方说它叫做my.data
1 Item A B C
2 AAE 7 1 37
3 CCC 7 0 38
4 PPI 10 1 35我想在"AAE"下面创建一个名为"AAA" ( "AAE" - "CCC" - "PPI" )的行,例如,对于列A,我们有7-7-10 = -10,对于列B,我们有1-0-1 = 0等等。为了澄清,我的数据集要大得多,并且"CCC“和"PPI”不是直接在"AAE“下面。
我该怎么做?
发布于 2016-06-06 00:36:46
另一种选择是首先转置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发布于 2016-06-06 00:17:56
我可以使用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发布于 2016-06-06 06:30:00
apply(my.data[,c("A","B","C")],2,function(x)Reduce("-",x))
A B C
-10 0 -36 https://stackoverflow.com/questions/37647964
复制相似问题