Итак, я работаю с двумя фреймами данных, и я хотел бы создать новый фрейм данных, который собирает и суммирует данные, которые находятся внутри этих двух фреймов данных.
Я использовал для этого сцикла, работает отлично, но проблема в том, что когда фрейм данных очень большой, это занимает несколько раз, поэтому я хотел знать, как я могу добиться этого без использования цикла, если это возможно и быстрее.
Этокод, с которым я работаю, чтобы избежать цикла, но мне нужен какой-то другой шаг, чтобы получить ожидаемый результат.
df2 <- data.frame("S" = c("M", "M", "SE", "SI", "V", "M"),
"C" = c(300, 400, 400, 500, 600, 1000),
"F" = c("F1", "F2", "F3", "F2", "F4", "F5"),
"M" = c("M1", "M2", "M1", "M2", "M3", "M1"), stringsAsFactors = FALSE)
df3 <- data.frame("S" = c("M", "SE", "SI"),
"C" = c(3000, 4000, 5000),
"F" = c("F1", "F2", "F3"),
"M" = c("M1", "M2", "M3"), stringsAsFactors = FALSE)
df <- data.frame(F = sort(unlist(unique(df2$M))))
a <- df2 %>% group_by(M) %>% summarise(C = sum(C))
a <- as.data.frame(a)
a <- a[order(a$M),]
b <- df3 %>% group_by(M) %>% summarise(C = sum(C))
b <- as.data.frame(b)
b <- b[order(b$M),]
df$M <- NA
df$SE <- NA
df$SI <- NA
df$V <- NA
df$T <- a$C
df$T2 <- b$C
df$T3 <- df$T / 3 * 12
df$T4 <- ((df$T3 / df$T2) - 1) * 100
df <- df[order(df$T, decreasing = TRUE),]
Так что df - это пример того, что у меня есть в настоящее время, и теперь я хотел бы иметьчто-то вроде этого:
df4 <- data.frame("F" = c("M1", "F5", "F3", "F1", "M2", "F2", "M3", "F4"),
"M" = c(1300, 1000, 0, 300, 400, 400, 0, 0),
"SE" = c(400, 0, 400, 0, 0, 0, 0, 0),
"SI" = c(0, 0, 0, 0, 500, 500, 0, 0),
"V" = c(0, 0, 0, 0, 0, 0, 600, 600),
"T" = c(1700, 1000, 400, 300, 900, 900, 600, 600),
"T2" = c(3000, 0, 0, 3000, 4000, 4000, 5000, 5000),
"T3" = 0,
"T4" = 0,
"R" = NA, stringsAsFactors = FALSE)
df4$T3 <- df4$T / 3 * 12
df4$T4 <- ((df4$T3 / df4$T2) - 1) * 100
df4[c(2, 3), "T4"] <- 100
Просто для пояснения, это просто пример, данные, которые я показываю в этом примере, не те, с которыми я действительно работаю, я имею в виду, например, не думаю, что столбец«M» должен иметь такие данные, как «M1», «M2», «M3» ... «MX», но данные могут быть чем-то вроде «abc» или чем-то еще.