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