在R dplyr中,为什么在点差函数后有一个单引号?

时间:2019-06-04 10:07:53

标签: r dplyr spread

我正在尝试使用dplyr扩展功能将一列扩展为多个列。散布后,对该列的访问权限只有一个引号,由于要过滤数据框,因此我想删除该引号

以下是我的代码

# Create Test Frame
testframe = data.frame(name = c("foo-tt.0","bar-tt.0","dd-tt.0","tt-tt.0"),age=as.numeric(c(40,38,10,8)))
#Pivot using name
testframe_pivot <- testframe %>% spread(name,age)

我需要访问以下框架

testframe_pivot$`bar-tt.0` ## I don't want these quotes
[1] 38

为什么我不能得到(期望的输出)

> testframe_pivot$bar-tt.0
[1] 38

反而我得到

> testframe_pivot$bar-tt.0
Error: object 'tt.0' not found

我了解它们是由于字母和其他字符的混合,但不确定如何消除此错误

结果是..

>name_I_want = c("foo-tt.0")

>select_(testframe_pivot,.dot=name_I_want)
Error in .f(.x[[i]], ...) : object 'foo' not found

1 个答案:

答案 0 :(得分:2)

名称的问题是-符号。除非您摆脱掉它,否则您将无法使用$运算符而不会出现反勾号。 base-R有两个选项:

将名称更正为语法上正确的R。make.names效果很好:

names(testframe_pivot) <- make.names(names(testframe_pivot))
testframe_pivot
#  bar.tt.0 dd.tt.0 foo.tt.0 tt.tt.0
#1       38      10       40       8

或者您用[[和字符串子集:

testframe_pivot[['bar-tt.0']]
#[1] 38