2015-02-26 5 views
1

вот мой код:длина вычисления с использованием na.omit в R

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")))) 

Этот код сканирует кучу Ехчла и приписывает значение «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 & FALSE), а не только истинные ценности.

Если я это сделать:

length(error.sw.c) 

я получаю сумму всех значений ошибок, не все значения ошибок отдельно.

Итак, мой вопрос: есть ли способ получить длину каждого отдельного файла excel, чтобы я мог поместить его в dataframe? Спасибо, StackOverflow, вы меня еще не подвели. Любая помощь будет оценена. Дайте мне знать, если требуется какое-либо разъяснение. :)

+1

Не очень ясно, что вы пытаетесь выполнить, но если вам просто нужно подсчитать количество значений TRUE, 'sum()' будет работать. Извините, если я неправильно интерпретирую –

+0

Ха-ха, ничего себе, что было проще, чем ожидалось, - так много. Если вы хотите, вы должны ответить на вопрос ниже, чтобы я мог вас счесть. :) – y3trgfhsfgr

ответ

2

sum() может использоваться для подсчета числа TRUE s в логическом векторе. Давайте посмотрим, почему:

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 
Смежные вопросы