使用R中的na.omit计算长度

时间:2015-02-26 01:32:02

标签: r dataframe

这是我的代码:

data <-setNames(lapply(paste0("80-20 ", file.number,".csv"),read.csv,stringsAsFactors=FALSE),paste(file.number,"participant"))
# imports csv data and turns it into a R-data file

df <- data.frame(RT=1:100,rep.sw=sample(c("sw","rep",100,replace=TRUE)))

(error.sw.c <- lapply(data[control.data],function(df) with(df, na.omit(rep.sw == "sw" & accuracy == "wrong"))))

对于标记为“sw”的值,每次精度“错误”时,此代码会扫描一堆excel文件并将值设置为“TRUE”。然后我想要做的是计算真值的数量,并将它们放在数据框中。这就是我试过的:

(dataframe.c <- data.frame(switch.rt = sapply(sw.c,mean), repetition.rt = sapply(rep.c,mean), switch.error = sapply(error.sw.c,length), group = rep("control",each=length(control.data))))

然而,当我这样做时,它给出了所有值的长度(TRUE&amp; FALSE),而不仅仅是TRUE值。

如果我这样做:

length(error.sw.c)

我得到所有错误值的总和,而不是单独的所有错误值。

所以我的问题是:有没有办法获得每个excel文件的长度,以便我可以把它放在数据框中?谢谢StackOverflow社区,你们大家还没让我失望。任何帮助将不胜感激。如果需要澄清,请与我们联系。 :)

1 个答案:

答案 0 :(得分:2)

sum()可用于计算逻辑向量中TRUE的数量。让我们看看为什么:

set.seed(555)
logicalVec <- rnorm(5) > 0 # create logical vector
logicalVec
[1] FALSE  TRUE  TRUE  TRUE FALSE

算术函数将逻辑值强制转换为数值,使FALSE变为0TRUE变为1

logicalVec*1
[1] 0 1 1 1 0

您可以将sum(logicalVec)视为等同于sum(c(0,1,1,1,0))

sum(c(0,1,1,1,0))
[1] 3
sum(logicalVec)
[1] 3