Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 删除基于给定条件的观察_R_Dataframe - Fatal编程技术网

R 删除基于给定条件的观察

R 删除基于给定条件的观察,r,dataframe,R,Dataframe,我想从数据集中删除特定的观察结果。每个观察都有一个序列号(识别号)、天(周一到周日)7个变量day1到day7,每个变量代表一周中的一天。第一天是周一,第七天是太阳 我想删除那些第1天…第7天等于零的观察(序列)。这是id 12的情况,在星期一期间没有进行任何观察(例如,与第1天匹配的日期返回零)。在123的案例中,周二记录了3次观察,我想保留这个序列 我试图将数据转换为long,并以此为基础进行匹配,但没有成功 输入: serial day1 day2 day3 day4 day5 da

我想从数据集中删除特定的观察结果。每个观察都有一个序列号(识别号)、天(周一到周日)7个变量day1到day7,每个变量代表一周中的一天。第一天是周一,第七天是太阳

我想删除那些第1天…第7天等于零的观察(序列)。这是id 12的情况,在星期一期间没有进行任何观察(例如,与第1天匹配的日期返回零)。在123的案例中,周二记录了3次观察,我想保留这个序列

我试图将数据转换为long,并以此为基础进行匹配,但没有成功

输入:

  serial  day1 day2 day3 day4 day5 day6 day7 Day 
    12    0    1    2    1    1    3    1   Monday   
   123    0    3    0    3    3    0    3   Tuesday  
    10    0    3    0    3    3    3    3   Thursday 
输出:

serial  day1 day2 day3 day4 day5 day6 day7 Day 
  123    0    3    0    3    3    0    3   Tuesday  
样本数据

structure(list(serial = c(12, 123, 10), day1 = c(0, 0, 0), day2 = c(1, 
3, 3), day3 = c(2, 0, 0), day4 = c(1, 3, 3), day5 = c(1, 3, 3
), day6 = c(3, 0, 3), day7 = c(1, 3, 3), Day = structure(c(1L, 
3L, 2L), .Label = c("Monday", "Thursday", "Tuesday"), class = "factor")), row.names = c(NA, 
3L), class = "data.frame")

以下代码满足问题的要求。
它使用package生成一个工作日名称向量,并将
Day
列中的值与该向量相匹配。然后用天数粘贴字符串
“day”
,并使用这些字符串获取观测值,并将行保留在不为零的位置

j <- match(df1$Day, DescTools::day.name)
j <- paste0("day", j)
df1[diag(as.matrix(df1[, j])) != 0, ]
#  serial day1 day2 day3 day4 day5 day6 day7      Day
#2    123    0    3    0    3    3    0    3  Tuesday
#3     10    0    3    0    3    3    3    3 Thursday

j你能添加一些已经失败的解决方案吗?@NelsonGon非常感谢我尝试改变数据并匹配天数,你说删除第1天或第7天等于0的观察值。serial 123有一个条件,其中day1为0。为什么它没有被删除?创建第二个数据帧,并在其中添加匹配的条件。@user10974052我应该说代码使用了非基R包。将编辑。