我有一个数据框
XYdata
,如果时间列(ppt
)中有任何值,我需要计算每个参与者(item
)和项目(Time
)。如果那里没有值,则意味着该参与者和项目的所有行都是 NA。结果需要放入一个以 N_NAs 和 N_Values 作为列的表中,如下所示:
|participant |item |N_NAs |N_Values|
|------------|-------|------|--------|
|ppt1 |item1 |0 |1 | #there was a value
|ppt1 |item2 |1 |0 | #there was no value, only NAs
|ppt1 |item3 |1 |0 | #there was no value, only NAs
|ppt1 |item4 |0 |1 | #there was a value
虽然我可以计算每个参与者和项目有多少个 NA:
XYdata2 <-XYdata %>% group_by(ppt, item) %>% summarise(sum_na_Time = sum(is.na(Time)))
然后计算这是否是我应该期望每个参与者和项目的总行数,我更喜欢使用
if
或条件来计算它。
根据数据的结构方式,您可以首先使用
ifelse()
,然后使用 ddply()
包中的 plyr
来汇总所有值。
有一个更短的代码,但我不知道,但这样的东西可以工作:
library(plyr)
#add new column and add 1 for every empty column in XYdata$Time and 0 if there is a value
XYdata$N_NAs <- ifelse(XYdata$Time == ' ', 1, 0)
#add new column and add 0 for every empty column in XYdata$Time and 1 if there is a value
XYdata$N_Values <- ifelse(XYdata$Time == ' ', 0, 1)
#add up all the values for each ppt per item
results <- ddply(XYdata, .(ppt, item), nrow)