我想知道这里是否有人可以帮助我。我有两个包含3列的数据框:names
,gender
amount
,两年不同。我希望能够比较每个数据框中名称的上升和下降。
提前谢谢!
编辑 -
d=read.table("names2000.txt",header=FALSE,sep=",")
colnames(d)=c('name','gender','amount')
这提供了年份2000
的数据。然后我使用do.call(rbind, by(d, list(d$gender), FUN=head,5))
查找返回的前5名男性和女性姓名
name gender amount
F.1 Linda F 80412
F.2 Mary F 65443
F.3 Patricia F 47920
F.4 Barbara F 41560
F.5 Susan F 38019
M.6107 James M 86139
M.6108 Robert M 83534
M.6109 John M 79396
M.6110 Michael M 65141
M.6111 David M 60704
对于我使用的第二个数据框
j=read.table("names2010.txt",header=FALSE,sep=",")
colnames(j)=c('name','gender','amount')
这会返回年度数据' 2010'我尝试再次使用do.call(rbind, by(d, list(d$gender), FUN=head,5))
查找今年男性和女性的前5名,但我收到了错误消息
> "Error in tapply(seq_len(33983L), list(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
> 1L, : arguments must have same length"
我想比较一下,与2010年数据相比,2000年数据框中的前10个名称值是上升还是下降。有没有办法确定两年之间名字的数量增加最多?
答案 0 :(得分:0)
我创建了两个伪数据帧。如果您可以从下次提供完整的数据集,那就太棒了。在这里,我结合了两个数据名称,按年份和性别划分了前五名,并最终计算了收益(增加/减少)。
library(dplyr)
df1 <- data.frame(
names = c("Ana", "Beth", "Caroline", "Diana", "Ellen",
"Felicity", "Grace", "Happy", "Irine", "Jasmin",
"Andrew", "Bob", "Cabal", "Dan", "Edward",
"Fred", "Greg", "Hugh", "Illia", "Jacob"),
gender = rep(c("F", "M"), each = 10),
frequency = sample.int(1e6, 20, replace = TRUE),
year = 2000,
stringsAsFactors = FALSE)
df2 <- data.frame(
names = c("Ana", "Beth", "Caroline", "Diana", "Ellen",
"Felicity", "Grace", "Happy", "Irine", "Jasmin",
"Andrew", "Bob", "Cabal", "Dan", "Edward",
"Fred", "Greg", "Hugh", "Illia", "Jacob"),
gender = rep(c("F", "M"), each = 10),
frequency = sample.int(1e6, 20, replace = TRUE),
year = 2010,
stringsAsFactors = FALSE)
foo <- rbind(df1,df2)%>%
arrange(year, gender, desc(frequency)) %>% # Sort your data by the three columns
group_by(year, gender) %>%
filter(row_number() < 6) %>% # pick up the top 5 names by year and gender
ungroup() %>%
group_by(names) %>%
mutate(gain = frequency - lag(frequency)) %>% # calculate increase/decrease
ungroup() %>%
filter(year == 2010) # select top 5 names from 2010, NA means the name was not in top 5 in 2000.
如果增益为NA,则表示名称在2000年不在前5名。如果获得为正,
这些名字在2000年和2010年都名列前五,并且越来越受欢迎。如果增益为负,
这些名字在这些年里排在前5位,但却不那么受欢迎了。因为我使用了sample.int
,
你的结果会有所不同。
# names gender year frequency gain
#1 Ana F 2010 934706 NA
#2 Irine F 2010 869691 240576
#3 Caroline F 2010 651674 NA
#4 Felicity F 2010 386115 -512275
#5 Happy F 2010 382388 -278410
#6 Edward M 2010 827374 57532
#7 Greg M 2010 794240 76621
#8 Illia M 2010 723711 NA
#9 Fred M 2010 668467 NA
#10 Bob M 2010 599566 NA