我有以下数据框架:
df <- structure(list(Number = c("3117", "3118", "3119", "3120", "3121",
"3122"), City = c("Акмолинская", "Актюбинская", "Алматинская",
"Атырауская", "ЗКО", "Жамбылская"), Year = c("2001", "2001",
"2001", "2001", "2001", "2001"), Info = c("Среднегодовая численность населения РК (чел.)",
"Среднегодовая численность населения РК (чел.)", "Среднегодовая численность населения РК (чел.)",
"Среднегодовая численность населения РК (чел.)", "Среднегодовая численность населения РК (чел.)",
"Среднегодовая численность населения РК (чел.)"), Value = c("765690",
"669198", "1554447", "445631", "600987", "980563"), Status = c("Факт",
"Факт", "Факт", "Факт", "Факт", "Факт")), row.names = c(NA, 6L
), class = "data.frame")
我需要为每年的总和值列创建一个总和"Республика Казахстан"在城市栏。换句话说,我需要为每年的所有城市创建一个价值总和,并在City列中用国家名称命名它。怎么做呢?
我尝试了这段代码,但是它给了我无效的参数类型(字符)。错误:
for (year in unique(df$Year)) {
df[nrow(df) + 1,] = c("0","Республика Казахстан", year, "Среднегодовая численность населения РК (чел.)", sum(df[which(df[,3]==year),5]), "Факт")
}
(在前面,我的emacs/ess没有显示utf-8字符串,所以它们在这里看起来是空的。
首先求和,不能为character
。从那里,总结然后连接原始数据。
基地R
df$Value <- as.numeric(df$Value)
newdf <- transform(aggregate(Value ~ Year, data = df, FUN = sum), City = "City Sum")
newdf <- cbind(newdf, df[,setdiff(names(df), names(newdf))][0,][NA,])
rbind(df, newdf[,names(df)])
# Number City Year Info Value Status
# 1 3117 2001 ( .) 765690
# 2 3118 2001 ( .) 669198
# 3 3119 2001 ( .) 1554447
# 4 3120 2001 ( .) 445631
# 5 3121 2001 ( .) 600987
# 6 3122 2001 ( .) 980563
# 7 <NA> City Sum 2001 <NA> 5016516 <NA>
dplyr
library(dplyr)
df <- mutate(df, Value = as.numeric(Value))
df %>%
group_by(Year) %>%
summarize(City = "City Sum", Value = sum(Value)) %>%
bind_rows(df, .)
# Number City Year Info Value Status
# 1 3117 2001 ( .) 765690
# 2 3118 2001 ( .) 669198
# 3 3119 2001 ( .) 1554447
# 4 3120 2001 ( .) 445631
# 5 3121 2001 ( .) 600987
# 6 3122 2001 ( .) 980563
# 7 <NA> City Sum 2001 <NA> 5016516 <NA>