【问题标题】:How to add a row which sums one column for every value in another column?如何添加一行,对另一列中的每个值求和一列?
【发布时间】:2021-11-19 09:31:19
【问题描述】:

我有以下数据框:

 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")

我需要对每年的 Value 列求和,以在 City 列中使用“Республика Казахстан”创建一个总和。换句话说,我需要为每年的所有城市创建一个 Value 的总和,并在 City 列中用国家名称命名。该怎么做?

我尝试了这段代码,但它给了我“参数的'类型'(字符)无效”错误:

for (year in unique(df$Year)) {
  df[nrow(df) + 1,] = c("0","Республика Казахстан", year, "Среднегодовая численность населения РК (чел.)", sum(df[which(df[,3]==year),5]), "Факт")
}

【问题讨论】:

  • 那么按城市和年份分组,然后求和?
  • 请发布所需结果的示例。
  • 按年份和值分组,将“Республика Казахстан”插入城市,即国家名称。因此,每年的国家条目总和所有城市的价值。
  • 您能否将数据更改为英文并显示预期的输出结果?

标签: r group-by sum


【解决方案1】:

(在前面,我的 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>

【讨论】:

    猜你喜欢
    • 2021-08-12
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多