R语言按列值扩展行时出现'undefined columns selected'错误
问题:根据'total'列扩展数据行时出现'undefined columns selected'错误
问题背景
我有一个名为google_removal的数据集,包含7列14468行。想要根据total列的数值(每行观测的重复次数)扩展数据行数,但始终收到undefined columns selected错误。已确认total列名正确,且问题并非遗漏逗号导致。
数据集示例
'period ending' 'country' 'code' 'product' 'reason' 'total' 'year' 2011-06-30 Argentina AR Blogger Defamation 4 2011 2011-06-30 Argentina AR Blogger Privacy 1 2011 2011-06-30 Argentina AR GoogleAd Defamation 1 2011 2011-06-30 Argentina AR WebSearch Defamation 6 2011
预期扩展效果
'period_ending' 'country' 'code' 'product' 'reason' 'year' 2011-06-30 Argentina AR Blogger Defamation 2011 2011-06-30 Argentina AR Blogger Defamation 2011 2011-06-30 Argentina AR Blogger Defamation 2011 2011-06-30 Argentina AR Blogger Defamation 2011 2011-06-30 Argentina AR Blogger Privacy 2011 2011-06-30 Argentina AR GoogleAd Defamation 2011 2011-06-30 Argentina AR WebSearch Defamation 2011 2011-06-30 Argentina AR WebSearch Defamation 2011 2011-06-30 Argentina AR WebSearch Defamation 2011 2011-06-30 Argentina AR WebSearch Defamation 2011 2011-06-30 Argentina AR WebSearch Defamation 2011 2011-06-30 Argentina AR WebSearch Defamation 2011
尝试过的代码
google_removal_expanded <- google_removal[seq_len(nrow(google_removal), google_removal$total), 1:13000] google_removal_expanded <- google_removal[rep(row.names(google_removal), google_removal$total), 1:13000]
错误信息
Error in
[.data.frame(google_removal, rep(row.names("total"), google_removal$total), : undefined columns selected
测试数据
dput(head(google_removal))
structure(list(period_ending = c("2011-06-30", "2011-06-30", "2011-06-30", "2011-06-30", "2011-06-30", "2011-06-30"), country = c("Argentina", "Argentina", "Argentina", "Argentina", "Argentina", "Argentina" ), code = c("AR", "AR", "AR", "AR", "AR", "AR"), product = c("Blogger", "Blogger", "Google Ads", "Web Search", "Web Search", "Web Search" ), reason = c("Defamation", "Privacy and Security", "Defamation", "Defamation", "Other", "Privacy and Security"), total = c(4L, 1L, 1L, 6L, 1L, 8L), year = c("2011", "2011", "2011", "2011", "2011", "2011")), row.names = c(NA, 6L), class = "data.frame")
解决方案
错误原因
代码中的列索引1:13000远超数据集实际列数(仅7列),导致R无法找到对应列,触发错误。同时第一个代码里seq_len的用法错误,该函数仅接受单个参数,无法生成对应重复次数的行索引。
正确实现代码
基础R方式
# 生成重复行索引:每行按total列数值重复 row_idx <- rep(seq_len(nrow(google_removal)), google_removal$total) # 提取行并移除total列(或保留所有列,按需选择) google_removal_expanded <- google_removal[row_idx, -6]
tidyverse方式(更简洁)
library(tidyverse) google_removal_expanded <- google_removal %>% uncount(total) %>% select(-total) # 可选,移除total列
效果验证
运行上述代码后,数据集会按照total列的数值扩展行数,得到预期结果,且不会出现列选择错误。
内容的提问来源于stack exchange,提问作者L_Norman
相关产品推荐
相关产品推荐

