R 将一个数据集重新编码到另一个数据集中
请参见以下简化数据集,该数据集以国家/年度为基础:R 将一个数据集重新编码到另一个数据集中,r,recode,R,Recode,请参见以下简化数据集,该数据集以国家/年度为基础: country <- c("CountryA", "CountryA", "CountryA", "CountryA", "CountryB", "CountryB", "CountryB", "CountryB", "CountryC", "CountryC", "CountryC", "CountryC") year <- c(2001, 2002, 2003, 2004, 2001, 2002, 2003, 2004, 20
country <- c("CountryA", "CountryA", "CountryA", "CountryA",
"CountryB", "CountryB", "CountryB", "CountryB",
"CountryC", "CountryC", "CountryC", "CountryC")
year <- c(2001, 2002, 2003, 2004,
2001, 2002, 2003, 2004,
2001, 2002, 2003, 2004)
v1 <- c(2, 3, 5, 4, 3, 3, 1, 2, 1, 4, 3, 2)
df1 <- data.frame(country, year, v1)
df1
country year v1
CountryA 2001 2
CountryA 2002 3
CountryA 2003 5
CountryA 2004 4
CountryB 2001 3
CountryB 2002 3
CountryB 2003 1
CountryB 2004 2
CountryC 2001 1
CountryC 2002 4
CountryC 2003 3
CountryC 2004 2
country您的标题意味着某种类型的数据清理或子集,但这里您要的是聚合或摘要。对于提供的数据,dplyr
是一个很好的选择:
library(dplyr)
df2 <- group_by(df1, country) %>%
summarize(start = min(year), end = max(year), v1Max = max(v1), v1Avg = mean(v1))
# A tibble: 3 x 5
# country start end v1Max v1Avg
# <fctr> <dbl> <dbl> <dbl> <dbl>
#1 CountryA 2001 2004 5 3.50
#2 CountryB 2001 2004 3 2.25
#3 CountryC 2001 2004 4 2.50
库(dplyr)
df2%
汇总(开始=最小值(年),结束=最大值(年),v1Max=最大值(v1),v1Avg=平均值(v1))
#一个tibble:3x5
#国家/地区起始端v1Max v1Avg
#
#1 CountryA 2001 2004 5 3.50
#2 CountryB 2001 2004 3 2.25
#3 CountryC 2001 2004 4 2.50
您想重新编码数据集还是将其子集?我编辑了问题文本。谢谢你提醒我。事实上,它是聚合的。重新编码是重新标记值,子集是在不重新编码或更改其形状的情况下获取数据的子集,聚合是通过使用聚合函数(如平均值、最大值等)对数据进行分组来汇总数据。是的,它确实是聚合的一种形式。谢谢。但是您的代码对所有行返回相同的开始年和结束年,这是因为您作为示例提供的数据集对每个“country”值都具有相同的开始年和结束年。例如,如果您删除了CountryA的2004条目,则摘要将只运行到2003年。我理解。但我想创建一个子集,如上面的df2所示。我不希望子集包含df1中的所有年份。似乎您希望在这里有非常具体的行为,每个国家提取不同的年份。要做到这一点,您需要在使用上述代码之前对数据进行子集划分,条件是子集(df,(country='CountryA'&year>=2001&year<2004)|(country='CountryB'&year>=2002&year<2005)|(country='CountryC'&year==2003))
library(dplyr)
df2 <- group_by(df1, country) %>%
summarize(start = min(year), end = max(year), v1Max = max(v1), v1Avg = mean(v1))
# A tibble: 3 x 5
# country start end v1Max v1Avg
# <fctr> <dbl> <dbl> <dbl> <dbl>
#1 CountryA 2001 2004 5 3.50
#2 CountryB 2001 2004 3 2.25
#3 CountryC 2001 2004 4 2.50