我需要附加一个列结果,其中包含每个国家/地区的平均值,从一个数据框(df)到包含国家/地区的另一个数据框(df1)。如果有些国家/地区未出现在汇总表中我应该得到一个空单元格。 以下是我创建第一个数据框的每个国家/地区平均值的代码:
df <- read.table(text = "target birds wolfs Country
3 9 7 a
3 8 4 b
1 2 8 c
1 2 3 a
1 8 3 a
6 1 2 a
6 7 1 b
6 1 5 c ",header = TRUE)
dfCountries<-summaryBy(wolfs ~ Country , data = df, FUN = mean)
dfCountries
Country wolfs.mean
1 a 3.75
2 b 2.50
3 c 6.50
现在我想将每个国家/地区的结果附加到新列中的新数据框中:Append_Country。我可以这样做吗?
这是df1数据:
df1<-read.table(text = " target birds wolfs Country
6 4 5 a
4 5 3 a
3 8 2 a
1 6 4 b
3 5 1 a
2 2 1 b
9 9 4 b
8 9 5 f
2 3 1 f ",header = TRUE)
这是我想要的输出:
df1
target birds wolfs Country Append_Country
6 4 5 a 3.75
4 5 3 a 3.75
3 8 2 a 3.75
1 6 4 b 2.50
3 5 1 a 3.75
2 2 1 b 2.50
9 9 4 b 2.50
8 9 5 f
2 3 1 f
答案 0 :(得分:2)
您可以尝试使用merge()
选项all=TRUE
:
df3 <- merge(df1,df2, by="Country", all=TRUE)
#> df3
# Country target birds wolfs Append_Country
#1 a 4 5 3 3.75
#2 a 3 8 2 3.75
#3 a 6 4 5 3.75
#4 a 3 5 1 3.75
#5 b 2 2 1 2.50
#6 b 9 9 4 2.50
#7 b 1 6 4 2.50
#8 f 2 3 1 NA
#9 f 8 9 5 NA
#10 c NA NA NA 6.50
如果您不喜欢NA
条目,可以用空字符串替换它们:
df3[is.na(df3)] <- ""
我们还可以根据所需的输出重新排序列序列以获得结果:
df3 <- df3[, c(2,3,4,1,5)]
#> df3
# target birds wolfs Country Append_Country
#1 4 5 3 a 3.75
#2 3 8 2 a 3.75
#3 6 4 5 a 3.75
#4 3 5 1 a 3.75
#5 2 2 1 b 2.5
#6 9 9 4 b 2.5
#7 1 6 4 b 2.5
#8 2 3 1 f
#9 8 9 5 f
#10 c 6.5
数据:强>
df <- read.table(text = "target birds wolfs Country
3 9 7 a
3 8 4 b
1 2 8 c
1 2 3 a
1 8 3 a
6 1 2 a
6 7 1 b
6 1 5 c ",header = TRUE)
df2 <- aggregate(wolfs ~ Country , data = df, FUN = mean)
colnames(df2) <- c("Country", "Append_Country")
df1<-read.table(text = " target birds wolfs Country
6 4 5 a
4 5 3 a
3 8 2 a
1 6 4 b
3 5 1 a
2 2 1 b
9 9 4 b
8 9 5 f
2 3 1 f ",header = TRUE)
答案 1 :(得分:0)
我使用sqldf包添加自己的答案虽然我认为@ RHertel的解决方案更好,因为他的解决方案基于base-R功能。
df_sq<-sqldf("select country as country_main, avg(wolfs) as Append_Country from df group by Country" )
df_sq
country_main Append_Country
1 a 3.75
2 b 2.50
3 c 6.50
df_sq1<-sqldf("select df1.*,df_sq.Append_Country from df1 left join df_sq on df_sq.country_main=df1.Country")
df_sq1
target birds wolfs Country Append_Country
1 6 4 5 a 3.75
2 4 5 3 a 3.75
3 3 8 2 a 3.75
4 1 6 4 b 2.50
5 3 5 1 a 3.75
6 2 2 1 b 2.50
7 9 9 4 b 2.50
8 8 9 5 c 6.50
9 2 3 1 c 6.50