2017-09-15 2 views
0

私は大きなデータフレームを持ち、22個のカラムを持っています。 2番目の列の値に基づいてフィルタを適用したいので、値が "X"で始まらない場合はその行を削除します。また、2番目の列のこの値にアスタリスクが含まれている場合は、行を削除します。開始文字と桁にアスタリスクがあることに基づくフィルタ

test <- c(1, 2, 3, 4, 5, 6, 7, 8, 9) 
secondcolumn <- c("Xidfhsfd*isjdf", "Hsuhdfskdh", "Xwidfsoid", "X*sdkfjjhsd", "Xkdsfhsd", "Uskesfudhsk", "Sdfukhsdiu", "Osdfihsdoiuh", "Xsodifdsifj") 
othercolumn <- c(3, 5, 7,2, 5, 8, 3, 0, 5) 

df <- as.data.frame(test, secondcolumn, othercolumn) 

これはどのように行われますか?この例では、1行目、2行目、4行目、6行目、7行目、8行目、9行目を削除したいと考えています。

ありがとうございます!

答えて

2

希望これは

# Condition 1: value start with "X" 
cond1 <- grep("^X", d[, 2]) 
# Condition 2: doesn't contain "*" 
cond2 <- grep("\\*", d[, 2], invert = TRUE) 
# Rows where any of condition is true 
wantedRows <- intersect(cond1, cond2) 
# Table without those rows 
d[wantedRows, ] 

enter image description here

+0

私は不明であるかもしれませんが、Xで始めることを望みます。いくつかの値はNAなので、Xで始めると自動的に削除されると思いました。それはどうやって行なわれるのですか? –

0

を作品別のオプションは、*[^*]+ない一つ以上の文字が続く文字列の先頭(^)で「X」と一致するだろう)の文字列の最後($)までは、それに基づいて数値インデックスとサブセットの行を取得する

df[grep("^X[^*]+$", df$secondcolumn),] 
# test secondcolumn othercolumn 
#3 3 Xwidfsoid   7 
#5 5  Xkdsfhsd   5 
#9 9 Xsodifdsifj   5 
関連する問題