如何添加一行,为另一列中的每个值对一列求和?
How to add a row which sums one column for every value in another column?
我有以下数据框:
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")
我需要对每年的值列求和,以便在城市列中创建一个带有“Республика Казахстан”的总和。换句话说,我需要为每年的所有城市创建一个价值总和,并在城市列中用国家名称命名。怎么做?
我试过这段代码,但它给了我“参数的 'type'(字符)无效”错误:
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>
我有以下数据框:
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")
我需要对每年的值列求和,以便在城市列中创建一个带有“Республика Казахстан”的总和。换句话说,我需要为每年的所有城市创建一个价值总和,并在城市列中用国家名称命名。怎么做?
我试过这段代码,但它给了我“参数的 'type'(字符)无效”错误:
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>