【发布时间】:2018-02-25 08:00:35
【问题描述】:
我想只选择出现在Loc 的每个级别中的Trt 的那些级别(对于每个大型数据集,通常出现在Loc 的级别中)。
Loc <- rep(paste0("L", 1:2), c(6, 4))
Trt <- c(rep(paste0("T", 1:3), times = 2), rep(paste0("T", 1:2), times = 2))
set.seed(12345)
Y <- c(rnorm(n=5, mean = 50, sd = 5), NA, rnorm(n=4, mean = 50, sd = 5))
df1 <- data.frame(Loc, Trt, Y)
df1
Loc Trt Y
1 L1 T1 52.92764
2 L1 T2 53.54733
3 L1 T3 49.45348
4 L1 T1 47.73251
5 L1 T2 53.02944
6 L1 T3 NA
7 L2 T1 40.91022
8 L2 T2 53.15049
9 L2 T1 48.61908
10 L2 T2 48.57920
所需输出
Loc Trt Y
L1 T1 52.92764
L1 T2 53.54733
L1 T1 47.73251
L1 T2 53.02944
L2 T1 40.91022
L2 T2 53.15049
L2 T1 48.61908
L2 T2 48.57920
这可以使用
来实现 library(dplyr)
df1 %>% filter(Trt != "T3")
在这里我知道外观的模式。我正在寻找更通用的解决方案。
【问题讨论】:
-
Trt的所有级别均未出现在Loc中。也许定义Trt的paste0之一应该有"L"而不是"T"的两倍?
标签: r dplyr data.table filtering data-manipulation