R:如何从平移列中获取关卡

时间:2018-07-20 20:41:20

标签: r tibble

总体目标:

我有一个小标题,其中有一列国家名称,一列包含“军事”或“经济”字符,以及一列数字(作为字符导入)。我需要汇总每个国家的军事支出和每个国家的经济支出。

我的策略

我使用

导入了数据
data <- read_excel("/path/name.xlsx")

现在使data成为小标题,但是所有值都是自动字符。为了使数字列可加,我写

data[,8] <- sapply(data[,8], as.numeric)

似乎可以工作,不确定是否最想实现目标。无论如何,现在我想获取“国家/地区”列中的因素,以便可以遍历每个国家/地区名称,然后遍历小标题的每一行,汇总军事支出,等等。

问题:

但是

levels(data[,3])

返回错误。那么,有没有一种方法可以获取关卡而又不遍历行以将其收集为向量,然后返回行以尝试收集军事支出?

1 个答案:

答案 0 :(得分:1)

list将字符串作为字符串读取,并且不会转换为因子。

读取数据:

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

R的魔力,不需要循环:

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

输出:

library(dplyr)

mydata %>% 
  group_by(country, spending_type) %>% 
  summarise(total_spending = sum(spending))