这是我的代码:
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社区,你们大家还没让我失望。任何帮助将不胜感激。如果需要澄清,请与我们联系。 :)
答案 0 :(得分:2)
sum()
可用于计算逻辑向量中TRUE
的数量。让我们看看为什么:
set.seed(555)
logicalVec <- rnorm(5) > 0 # create logical vector
logicalVec
[1] FALSE TRUE TRUE TRUE FALSE
算术函数将逻辑值强制转换为数值,使FALSE
变为0
而TRUE
变为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