的总体目标:
我有一个带有国家名称列的Ti球,一个包含“军事”或“经济”字符的列,以及一个数字列(作为字符导入)。我需要把每个国家的军事开支和每个国家的经济开支合计起来。
My策略:
我将数据导入到
data <- read_excel("/path/name.xlsx")这使得data成为一个tibble,但是所有的值都是自动字符。为了使数字列可加和,我编写
data[,8] <- sapply(data[,8], as.numeric)似乎很有效,不确定这是否是实现目标的最佳选择。不管怎么说,现在我想得到国家栏的因素,这样我就可以循环每一个国家的名称,然后循环每一行的tibble,汇总军事开支,等等。
问题:
然而,
levels(data[,3])返回一个错误。那么,是否有一种方法可以获得水平,而不对行进行循环,将其收集到向量中,然后再返回试图收集军费金额的行?
发布于 2018-07-20 21:00:47
read_excel将字符串读入字符串,而不转换为一个因子。
阅读数据:
data <- read_excel("/path/name.xlsx",
col_types = c("guess", "guess", "guess", "numeric", "guess", "guess", "guess", "text"))
# I dont know your other column types备选案文一,转换为一个因素:
data$country <- as.factor(data$country)
levels(data$country)选项二,使用unique,它可能给您相同的东西,这取决于您正在做什么。
unique(data$country)然而,从你的总体目标来看,你想得到每个国家的总金额。使用dplyr。
# read fake data
mydata <- read.table(text = "
country spending_type spending
uk military 100
uk military 800
uk military 300
uk military 700
uk economic 500
uk economic 100
uk economic 80
uk economic 200
usa military 3100
usa military 2800
usa military 4300
usa military 3700
usa economic 2500
usa economic 1100
usa economic 280
usa economic 3200", header = TRUE, stringsAsFactors = FALSE)R的魔力,不需要循环:
library(dplyr)
mydata %>%
group_by(country, spending_type) %>%
summarise(total_spending = sum(spending))输出:
country spending_type total_spending
<chr> <chr> <int>
1 uk economic 880
2 uk military 1900
3 usa economic 7080
4 usa military 13900https://stackoverflow.com/questions/51450078
复制相似问题