如何从列范围之和为0的数据框中删除所有行?

时间:2019-08-08 16:47:21

标签: r

我有一个带有列的数据框
experimentResultDataColumns - faceGenderClk - 35 more columns ending with Clk - rougeClk - someMoreExperimentDataColumns
我正在尝试删除数据帧中的所有行,其中faceFenderClk到rougeClk(包括rougeClk)的50个列的总和为0

数据框中存在在线研究的数据,“ Clk”列计算参与者单击特定滑块的次数。如果未单击任何滑块,则数据无效。 (基本上就像某人在不将笔放在纸上的情况下向您提供调查问卷)

我能够通过如下语句执行类似的逻辑:
df<-df[!(df$screenWidth < 1280),]
切出所有尺寸不足的屏幕,但我不确定如何在该语句中执行此求和操作。我试过了
df <- df[!(sum(df$faceGenderClk:df$rougeClk) > 0)]
但这不起作用。 (我不太擅长R,我认为它绝对不应该使用该语法)

预期结果是一个数据框,其中删除了所有行,其中该行中从faceGenderClk到rougeClk的所有50个值的总和为0

编辑:
数据:https://pastebin.com/SLAmkHk5
代码的预期结果将删除第二行数据

到目前为止的

代码:

df <- read.csv("./trials.csv")
SECONDS_IN_AN_HOUR <- 60*60
MILLISECONDS_IN_AN_HOUR <- SECONDS_IN_AN_HOUR * 1000
library(dplyr)
#levels(df$latinSquare) <- c("AlexaF", "SiriF", "CortanaF", "SiriM", "GoogleF", "RobotM") ignore this since I faked the dataset to protect participants' personal data
df<-df[!(df$timeMainSessionTime > 6 * MILLISECONDS_IN_AN_HOUR),]
df<-df[!(df$screenWidth < 1280),]

自此接受编辑的答案以来,解决了以下问题:

cols = grep(pattern = "Clk$", names(df), value=TRUE)
sums = rowSums(df[cols])
df <- df[sums != 0, ]

1 个答案:

答案 0 :(得分:2)

首先,获取要检查的列的名称。然后将各列加起来并做您的子集。

# columns that end in Clk
cols = grep(pattern = "Clk$", names(df), value = TRUE)

# add them up
sums = rowSums(df[cols])

# susbet
df[sums != 0, ]