在 group_by 中使用条件语句

问题描述 投票:0回答:1

我有一个数据框

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
或条件来计算它。

r group-by count conditional-statements na
1个回答
0
投票

根据数据的结构方式,您可以首先使用

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)
© www.soinside.com 2019 - 2024. All rights reserved.