我有一个数据帧,它详细说明了库babynames
中长于5个字母的名称和短于5个字符的名称的计数,这些名称是我从install.packages("babynames")
然后从library(babynames)
获得的。
经过一些筛选和ifelse
与str_length(name)
之后,我创建了一个数据帧,如下所示:
sum_greaterthan5.sum sum_lessthan5.sum total_n_names.total_names
2109449 1436852 3546301
我想收集数据,这样我就可以有一个变量/列是数值,代表有多少婴儿的名字超过5个字母,等等…
criteria count
sum_greaterthan5.sum 2109449
sum_lessthan5.sum 1436852
total_n_names.total_names 3546301
然而,gather
函数没有正确读取我的列:
> df_5letters <- df %>%
+ gather(key=criteria, value = count, c('sum_greaterthan5.sum', 'sum_lessthan5.sum', 'total_n_names.sum') )
Error: Can't subset columns that don't exist.
x Column `sum_greaterthan5.sum` doesn't exist.
我尝试使用列索引,但遇到了一个与类型相关的错误。有没有其他函数可以代替gather
,或者我可以用其他方式修改gather
函数?
以下是我运行到这一点的代码:
babynames_2017_length_5 <- babynames_2017 %>%
mutate(five_letters = ifelse(str_length(name)>5,1,0)) %>%
filter(five_letters == 1) %>%
summarise(sum = sum(n))
babynames_2017_less_5 <- babynames_2017 %>%
mutate(five_letters = ifelse(str_length(name)>5,1,0)) %>%
filter(five_letters == 0) %>%
summarise(sum = sum(n))
df <- tibble(
sum_greaterthan5 = babynames_2017_length_5,
sum_lessthan5 = babynames_2017_less_5,
total_n_names = total_n # total_n was a variable that I got from a previous dataframe that I did a sum aggregation on with:
# total_n <- babynames_startwvowels[1,1]
)
babynames_2017_length_5
和babynames_2017_less_5
是一个数据帧,当您在tibble(..)
中使用它时,您正在制作一个嵌套的数据帧,因此gather
找不到该列。
从数据帧中提取列,它应该可以正常工作。
df <- tibble(
sum_greaterthan5 = babynames_2017_length_5$sum,
sum_lessthan5 = babynames_2017_less_5$sum,
total_n_names = total_n
)
此外,不需要创建两个单独的数据帧,将它们组合起来,然后使用gather
/pivot_longer
,您可以执行以下操作:
babynames %>%
group_by(five_letters = ifelse(str_length(name)>5,
'sum_greaterthan5', 'sum_lessthan5')) %>%
summarise(sum = sum(n))