如何按列选择特定行

时间:2017-10-27 01:37:50

标签: r

我有一个数据,我在下面展示了一个例子

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

我也想要没有它们的原始数据

2 个答案:

答案 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