我有一个数据帧,它详细说明了从babynames库中获取的长度超过5个字母的名称和长度小于5个字母的名称的计数,该库是从install.packages("babynames")获取的,然后是library(babynames)。
在使用str_length(name)进行了一些过滤和ifelse之后,我创建了一个数据帧,如下所示:
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]
)发布于 2020-12-17 12:06:41
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))https://stackoverflow.com/questions/65334544
复制相似问题