我有DF,看起来像
DF
Nrow a b c d
1 0.1 0.2 0.3 0.4
2 2 3 4 5
3 7 8 9 10
我想从第2行和第3行中减去第1行。
我该怎么办? 感谢您的任何提示。
更新
我看到了这段代码:within-group differences from group member,并尝试了它。
编辑我的数据:
newdf <- df[!is.na(S[,1]),]
## df有NA值干扰分析,所以我删除了它们。
df <- data.frame(treatment = rep(c('','baseline', 'treatment 1', 'treatment 2'), times=372),S[c(1:258)])
A <- df %>%
mutate_each(funs(. - .[treatment=="baseline"]), -treatment) %>%
filter(treatment!="baseline")
##有多个列,我想为其计算行方式更改
View(A)
然而,现在我想要得到正确的结果(或绝对变化,即第2行 - 第1行),但这些值与我手动计算的值不同。有什么想法吗?
谢谢!
回答11.03.2016
2-y Axes Plot with calculated absolute & relative Change in R
答案 0 :(得分:0)
如果我们需要从多行中减去一行,我们可以rep
单行将维度设置为具有多行的数据集子集,然后进行减法。
DF[2:3, -1]- DF[rep(1,2),-1]
# a b c d
#2 1.9 2.8 3.7 4.6
#3 6.9 7.8 8.7 9.6
DF <- structure(list(Nrow = 1:3, a = c(0.1, 2, 7), b = c(0.2, 3, 8),
c = c(0.3, 4, 9), d = c(0.4, 5, 10)), .Names = c("Nrow",
"a", "b", "c", "d"), class = "data.frame",
row.names = c(NA, -3L))
答案 1 :(得分:0)
使用索引查看行...
df <- read.table(textConnection("Nrow a b c d
1 0.1 0.2 0.3 0.4
2 2 3 4 5
3 7 8 9 10"), stringsAsFactors=FALSE, header=TRUE)
df[1, ] - df[2, ]
# or assign the result to a new row...
df <- rbind(df, df[1, ] - df[2, ])
答案 2 :(得分:0)
以下命令将执行从下面所有行中减去第1行的操作,并将从下面的行中打印第1行的减法结果。
data = data.frame(x=c(1,5,7,10),y=c(3,2,4,1.1),z=1:4)
data
# x y z
# 1 1 3.0 1
# 2 5 2.0 2
# 3 7 4.0 3
# 4 10 1.1 4
for(i in 2:nrow(data)){
result = data[i,] - data[1,]
print (result)
}
# x y z
# 2 4 -1 1 <--- 2nd row minus 1st row
# x y z
# 3 6 1 2 <--- 3rd row minus 1st row
# x y z
# 4 9 -1.9 3 <--- 4th row minus 1st row
希望这有帮助。您可以对数据中的任意行使用相同的命令。
答案 3 :(得分:0)
回答11.03.2016 #thought它可能会帮助其他人
这就是我最终做到的:
library(dplyr)
dft1= filter(df, df$time==1)
dft2= filter(df, df$time==2)
dft3= filter(df, df$time==3)
您可能需要根据数据集重命名数据框或列。
计算从第二个时间点到第一个时间点的绝对变化。第三到第一时间点:
abs1=dft2[33:290] - dft1[33:290]
abs2=dft3[33:290] - dft1[33:290]
计算从第二个时间点到第一个时间点的相对变化。第三到第一时间点:
rel1=abs1/dft1[33:290]*100
rel2=abs2/dft1[33:290]*100