r中的gather()函数在我的列存在时找不到它们



我有一个数据帧,它详细说明了库babynames中长于5个字母的名称和短于5个字符的名称的计数,这些名称是我从install.packages("babynames")然后从library(babynames)获得的。

经过一些筛选和ifelsestr_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_5babynames_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))

最新更新