2016-01-21 77 views
0

enter image description here我正在尝试生成图表并生成适当的表格,我需要使用函数。我写了下面的代码片段: -用函数内的dplyr替换数据

library(dplyr) 
library(reshape) 

x<-function(test) 
     { 
     test0 <- sprintf(test) 
     tableResgroup <- count(table1,"test0") 
     return(test0) 
     } 

x("R Co") 

的问题是值传递正确到TEST0但dplyr抛出一个错误,指出TEST0是不是一个有效的列名,这是有道理的。

由于我是一种新的R任何人都可以请帮忙吗?我有一个列(名称中有空格),需要在此列上对数据集进行子集划分。手动它的一切工作(我使用计数(表1,R co)-Rř在单个滴答声,但我需要写一个函数,因为我有很多名称中有空格的列,我打算将这些作为参数传递给我的函数

数据

table1 <- structure(list(Rco = structure(c(1L, 1L, 1L, 2L, 2L, 2L), 
    .Label = c("A220", "B334"), class = "factor"), 
    month = structure(c(2L, 1L, 3L, 2L, 1L, 3L), .Label = c("Feb", "Jan", "Mar"), class = "factor"), 
    Count = c(12, 22, 33, 44, 55, 66)), 
    .Names = c("Rco", "month", "Count"), 
    row.names = c(NA, 6L), class = "data.frame") 

## the column Rco has a space, so re-name it: 
names(table1)[1] <- "R co" 

enter image description here

+0

什么是'test'和'table1'?你能否在你的问题中添加一些示例数据,以便其他人可以重现你的问题? – tospig

+0

嗨tospig - table1只是一个输入数据表,我已经阅读了一个CSV形式,测试是我已经传递给我的函数x的参数。 test0用于存储测试的值,然后我尝试过滤test0上的行(很不幸不起作用),并将这些过滤的行存储在tableResgroup中。表1有一列“R Co”(等等),我想过滤“R Co”的各个值,然后在其他列上反复使用该功能。 – rantish

+0

所以基本上我试图完成的是传递列名作为函数参数,然后使用该列的值在tableResgroup中生成计数。我认为我可以使用一个函数,但是当我将列名称作为函数传递时,我无法使代码正常工作。 – rantish

回答

0

我尝试了以下内容和它的工作: -

library(dplyr) 
library(reshape) 
x<-function(test) 
    { 
    tableResgroup <- count(table1,table1$`test`) 
    tableResgroup <- reshape::rename(tableResgroup,c("table1$test0"=test)) 
    } 
tableResgroup <- x("R Co") 

如果有人有其他方法,请告诉我,因为我不确定这是多么优雅。

谢谢

+0

嗨,即使此功能工作正常,今天我还有一个新的请求删除R co的空值。因此,我按照先推荐的方法将表空白转换为na,如tableResgroup tableResgroup [tableResgroup ==“”] < - NA tableResgroup < - tableResgroup [!(is.na(tableResgroup $'test')),]但是,我得到这个警告“警告消息:在is.na(tableMQproblem $ test)is.na()应用于类型为'NULL'的非(列表或向量)”。有人可以请建议一种方法来过滤我函数参数测试中的NULL值。 – rantish