我有一个带有列的数据框
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, ]
答案 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, ]