长期潜伏着遇到麻烦的潜伏者。
我创建了一个列表(基于列中的项目),以便将我的数据集子集化为与特定变量相关的较小数据集。此列表包含带有连字符的字符串( - )。
dim.list <- c('Age_CareContactDate-Gender', 'Age_CareContactDate-Group',
'Age_ServiceReferralReceivedDate-Gender',
'Age_ServiceReferralReceivedDate-Gender-0-18',
'Age_ServiceReferralReceivedDate-Group',
'Age_ServiceReferralReceivedDate-Group-ReferralReason')
然后我编写了一些代码来遍历此列表中的每个项目,对我的主要数据进行子集化。
for (i in dim.list) {assign(paste("df1.",i,sep=""),df[df$Dimension==i,])}
这样可以正常工作,但是当我来聚合这个以获得一些摘要统计时,我无法引用数据集,因为R
在连字符后停止读取(我假设连字符是一些特殊字符)
如果我使用不带连字符的不同列表,例如
dim.list.abr <- c('ACCD_Gen','ACCD_Grp',
'ASRRD_Gen',
'ASRRD_Gen_0_18',
'ASRRD_Grp',
'ASRRD_Grp_RefRsn')
当我上面的for循环执行时,我得到6 data.frames
没有任何观察。
有谁知道为什么会这样?
很高兴澄清
感谢。
答案 0 :(得分:3)
评论回答:
标准变量名称中不允许使用连字符。想想一个简单的例子:a-b
。它是带连字符的变量名称还是减号b? R解释器假定为负b,因为它不需要空格来进行二进制运算。您可以使用反引号强制非标准名称,例如,
# terribly confusing names:
`a-b` <- 5
`x+y` <- 10
`mean(x^2)` <- "this is awful"
但最好遵循规则并使用标准名称,而不使用+ - * / % $ # @ ! & | ^ ( [ ' "
等特殊字符。在?quotes
处有一个关于名称和标识符的部分:
标识符由一系列字母,数字,句点(。)和下划线组成。它们不能以数字或下划线开头,也不能以句点后跟数字开头。保留字不是有效的标识符。
所以为什么你得到了一个错误,但你所做的并不是好的做法。我完全赞同Axeman的评论。使用split
将数据框划分为一个列表。并将其保留在列表中而不是使用assign
,通过这种方式循环或使用lapply
会更容易。您可能希望在How to make a list of data frames阅读我的答案,以进行大量讨论和示例。
关于您的评论“dim.list
不是Dimensions列”中的完整唯一条目集,这意味着您需要在拆分之前进行子集化:
nice_list = df[df$Dimension %in% dim.list, ]
nice_list = split(nice_list, nice_list$Dimension)