R:没有意义的因素

时间:2015-02-16 11:32:10

标签: r

出现这个特定问题时,最佳做法是什么?例如,我创建了一个数据框:

dat<- sqlQuery(con,"select * from mytable")

我的表格如下:

ID    RESULT    GROUP
--    ------    -----
1     Y         A
2     N         A
3     N         B
4     Y         B
5     N         A

其中ID是int,Result和Group都是因素。

问题是,当我想做类似的事情时:

tapply(dat$RESULT,dat$GROUP,sum)

我抱怨列是一个因素:

Error in Summary.factor(c(2L,2L,2L,2L,1L,2L,1L,2L,2L,1L,1L, :
sum not meaningful for factors

鉴于ggplot等因素必不可少,其他人如何处理?

设置stringsAsFactors = FALSE并重新运行给出

tapply(dat$RESULT,dat$GROUP,sum)
Error in FUN(X[[1L]], ...) : invalid "type" (character) or argument

所以我不确定只设置stringsAsFactors = FALSE是正确的方法

2 个答案:

答案 0 :(得分:2)

我假设您想在RESULT列中总结“Y”。

正如@akrun所建议的,一种可能性是使用table()

with(dat,table(GROUP,RESULT))

如果您想坚持使用tapply(),可以将RESULT列的类型更改为布尔值:

dat$RESULT <- dat$RESULT=="Y"
tapply(dat$RESULT,dat$GROUP,sum)

如果您的目标是将某些列作为因子而将其他列作为字符串,则可以将结果转换为仅选定列的因子,例如:与

dat<- sqlQuery(con,"select ID,RESULT,GROUP from mytable",as.is=2)

read.table man page一样(由sqlQuery手册页回忆):as.is 是逻辑向量(必要时可以回收值)或向量数字或字符索引,指定哪些列不应转换为因子。

但话说回来,您需要使用table()或将结果转换为布尔值。

答案 1 :(得分:0)

我也不清楚你的问题是什么。如果您只想尝试总结Y,那么:

    library(dplyr)
df <- data.frame(ID = 1:5, 
              RESULT = as.factor(c("Y","N","N","Y","N")),
              GROUP = as.factor(c("A", "A", "B", "B", "A")))

df %>% mutate(logRes = (RESULT == "Y")) %>%
       summarise(sum=sum(logRes))