我有一个如下所述的数据框:
DF Count Count2 %
A 100 0 0%
B 80 20(A-B) 20%
C 50 30(C-C) 37.5%
D 25 25(C-D) 50%
为此,我使用了以下代码:
df1 <- data.frame(matrix(nrow = 100))
df2 <- data.frame(matrix(nrow = 80))
df3 <- data.frame(matrix(nrow = 50))
df4 <- data.frame(matrix(nrow = 25))
df <- c('A', 'B', 'C', 'D')
count <- c(nrow(df1), nrow(df2), nrow(df3), nrow(df4))
count2 <- vector(mode="numeric", length = 4)
for(i in 1:4) {
if(i == 1) {
count2[i] <- 0
} else {
count2[i] <- count[i-1] - count[i]
}
}
percentage <- vector(mode="numeric", length = 4)
for(i in 1:4) {
if(i == 1) {
percentage[i] <- 0
} else {
percentage[i] <- ((count[i-1] - count[i])/count[i-1]) * 100
}
}
final_df <- data.frame(df, count, count2, percentage)
我想在B和C之间添加一个新行(比如说Z),为此我的count2公式将是(Count2(B)-Z)而不是(ZC)和百分比Count2(Z)/ Count2 (B)。
现在对于C count2以及百分比公式将是(B-C)而不是(Z-C)。
期望的输出:
DF Count Count2 %
A 100 0 0%
B 80 20(A-B) 20%
Z 15 5 (Count2(B)-Z) Count2(Z)/Count2(B)
C 50 30(C-C) 37.5%
D 25 25(C-D) 50%
答案 0 :(得分:0)
试试这个:
final_df[5,] <- final_df[4,]
final_df[4,] <- final_df[3,]
levels(final_df[,1]) <- c(levels(final_df[,1]), "Z")
final_df[3,1] <- "Z"
final_df[3,2:4] <- c(15, final_df[2,3]-15, 100*(final_df[2,3]-15)/final_df[2,3])