r语言 - 如何添加一行,其中一列求和在另一列中的每个值?



我有以下数据框架:

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>

相关内容

  • 没有找到相关文章