包含使用R的连字符的数据框

时间:2018-02-15 15:45:19

标签: r list for-loop dataframe subset

长期潜伏着遇到麻烦的潜伏者。

我创建了一个列表(基于列中的项目),以便将我的数据集子集化为与特定变量相关的较小数据集。此列表包含带有连字符的字符串( - )。

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没有任何观察。

有谁知道为什么会这样?

很高兴澄清

感谢。

1 个答案:

答案 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)