R:如何从 tibble 列中获取级别
R: How to get the levels from a tibble column
总体目标:
我有一个小标题,其中包含一列国家/地区名称、一列包含字符 "Military" 或 "Economic" 以及一列数字(作为字符导入)。我需要汇总每个国家的军事开支和每个国家的经济开支。
我的攻略:
我用
导入了数据
data <- read_excel("/path/name.xlsx")
现在使 data
成为小标题,但所有值都自动为字符。为了使数字列可求和,我写
data[,8] <- sapply(data[,8], as.numeric)
似乎有效,但不确定它是否是实现目标的最佳方式。不管怎样,现在我想获得国家列的因素,这样我就可以遍历每个国家名称,然后遍历小标题的每一行,汇总军费开支,等等。
问题:
然而,
levels(data[,3])
returns 一个错误。那么有没有一种方法可以在不循环遍历行以将它们收集到向量中,然后返回尝试收集军费开支总额的情况下获得级别?
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 13900
总体目标:
我有一个小标题,其中包含一列国家/地区名称、一列包含字符 "Military" 或 "Economic" 以及一列数字(作为字符导入)。我需要汇总每个国家的军事开支和每个国家的经济开支。
我的攻略:
我用
导入了数据data <- read_excel("/path/name.xlsx")
现在使 data
成为小标题,但所有值都自动为字符。为了使数字列可求和,我写
data[,8] <- sapply(data[,8], as.numeric)
似乎有效,但不确定它是否是实现目标的最佳方式。不管怎样,现在我想获得国家列的因素,这样我就可以遍历每个国家名称,然后遍历小标题的每一行,汇总军费开支,等等。
问题:
然而,
levels(data[,3])
returns 一个错误。那么有没有一种方法可以在不循环遍历行以将它们收集到向量中,然后返回尝试收集军费开支总额的情况下获得级别?
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 13900