我有一个数据,我在下面展示了一个例子
a = rep(1:5, each=3)
b = rep(c("a","b","c","a","c"), each = 3)
df = data.frame(a,b)
我想选择所有包含“a”
的行我试着用
做df[df$a %in% a,]
有人可以告诉我如何解决这些问题吗?
df2<- structure(list(V1 = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), V2 = structure(c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L,
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L), .Label = c("B02", "B03",
"B04", "B05", "B06", "B07", "C02", "C03", "C04", "C05", "C06",
"C07"), class = "factor")), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA,
-24L))
我想选择以B开头但不是全部的特定行,只是02,03,04,05
1 B02
1 B03
1 B04
1 B05
2 B02
2 B03
2 B04
2 B05
我也想要没有它们的原始数据
答案 0 :(得分:4)
我们需要检查'b'列
df[df$b %in% 'a',]
对于带有'df2'的更新问题,我们可以使用paste
将字符串'B02'创建为'B05'并使用%in%
创建子集
df2[df2$V2 %in% paste0("B0", 2:5),]
或另一个选项是grep
df2[grep("^B0[2-5]$", df2$V2),]
答案 1 :(得分:2)
> df
a b
1 1 a
2 1 a
3 1 a
4 2 b
5 2 b
6 2 b
7 3 c
8 3 c
9 3 c
10 4 a
11 4 a
12 4 a
13 5 c
14 5 c
15 5 c
这基本上说:
对于df中的所有列,请选择值等于
> rows_with_a<-df[df$b=='a', ]
> rows_with_a
a b
1 1 a
2 1 a
3 1 a
10 4 a
11 4 a
12 4 a