0

I have a dataframe with two columns such as:

> df
Col1     Col2
1,2,3    1
2,3      2
3        3
4        3
4,5      123
12       0
32       0

> class(df$Col1)
[1] "list"
> class(df$Col2)
[1] "integer"

>dput(df)
structure(list(Col1 = list(c(1,2,3), c(2,3), 3, 4, c(4,5), 12, 32), 
               Col2 = c(1L, 2L, 3L, 3L, 123L, 0L, 0L),..., class=data.frame)

How do I create a subset of df with only the rows where Col1 contains 2 or 3? IE:

> dfss
Col1    Col2
1,2,3   1
2,3     2
3       3

Thank you.

4

3 回答 3

1
> df[ sapply(df$Col1,function(x) any(2:3 %in% x)) , ]
     Col1 Col2
1 1, 2, 3    1
2    2, 3    2
3       3    3
于 2013-11-06T00:32:14.673 回答
0

简而言之:检查一下subsetgrepl如果你正在处理字符串。

这是我读取您的数据并假设值类型为字符串的方式,否则您可以删除 stringsAsFactors 并将其强制转换为您想要的任何类型。

> df <- read.table(text="
+ 1,2,3    1
+ 2,3      2
+ 3        3
+ 4        3
+ 4,5      123", col.names = c("Col1", "Col2"), stringsAsFactors=FALSE)
> # This is the key
> result <- subset(df, grepl("2", Col1) | grepl("3", Col1)) 
> df
Col1 Col2
1 1,2,3    1
2   2,3    2
3     3    3
4     4    3
5   4,5  123
> result
Col1 Col2
1 1,2,3    1
2   2,3    2
3     3    3
于 2013-11-06T00:30:01.440 回答
0
dfss <- df[ grepl("2" , df[ ,1])| grepl("3" , df[ ,1]) , ]
于 2013-11-06T00:24:02.500 回答