我有一个这样的数据框:
set.seed(12)
df <- data.frame(
v1 = sample(LETTERS, 10),
v2 = sample(LETTERS, 10),
v3 = sample(LETTERS, 10),
v4 = c(sample(LETTERS, 8), sample(letters, 2)),
v5 = c(sample(letters, 1), sample(LETTERS, 7), sample(letters, 2))
)
df
v1 v2 v3 v4 v5
1 B K F G p
2 U U T W N
3 W J C V Y
4 G I Q S E
5 D F E N T
6 A X Z T C
7 V Y K X I
8 M Z D Q A
9 Y L H k d
10 R B L j t
我想在df
的任何列中包含小写值的那些行中将df
子集化。 可以这样完成:
df1 <- df[grepl("[a-z]", df$v1) | grepl("[a-z]", df$v2) | grepl("[a-z]", df$v3) |
grepl("[a-z]", df$v4) | grepl("[a-z]", df$v5), ]
df1
v1 v2 v3 v4 v5
1 B K F G p
9 Y L H k d
10 R B L j t
但是,如果您有许多列(更多)并且容易出错,那么这样做是不经济的。是否有更清洁,更简单,更经济的方法,最好在基数R中使用?
答案 0 :(得分:7)
var table = document.getElementsByTagName("TABLE");
var div = document.getElementById('tablediv');
div.innerHTML += table;
答案 1 :(得分:6)
一个选择是在grepl
的每一列上应用lapply
,以创建逻辑list
的{{1}},并用{{1}创建vector
}
Reduce
或使用|
df[Reduce(`|`, lapply(df, grepl, pattern = "[a-z]")),]
# v1 v2 v3 v4 v5
#1 B L L M e
#9 R N D t t
#10 F X M h x
答案 2 :(得分:2)
您可以每行使用paste
,然后使用grepl
。
df[grepl("[a-z]", apply(df, 1, paste, collapse="")),]
# v1 v2 v3 v4 v5
#1 B L L M e
#9 R N D t t
#10 F X M h x
或者另一个选择是do.call
df[grepl("[a-z]", do.call(paste, df)),]