使用 grepl 从多列文本中提取值
Using grepl to extract a value from text across multiple columns
我有一个数据框 (df),其中包含州和城市的 2 列数据。但是,有时 2 列中的数据会被调换或输入错误。数据框看起来像这样:
location state
Bangkok
Bangkok Metropolitan
Central Thai Bangkok
我想创建一个新列 "City",方法是将这两个列中的 'Bangkok' 提取到一个单独的列中。我可以通过类似的方式为一列执行此操作:
df$city <- ifelse(grepl("Bangkok",df$location),"Bangkok","")
但是,我想一次搜索至少 2 列或更多列,例如:
df$city <- ifelse(grepl("Bangkok",df$location||df$state),"Bangkok","")
这显然行不通。 'filter' 我认为在 plyr 中做了类似但相反的事情。
感谢任何帮助。谢谢!
您可以多次使用 grepl
。此外,您应该使用 |
而不是 ||
.
df1 <- data.frame(location=c("Bangkok", "", "Central Thai", "someth"),
state=c("", "Bangkok Metropolitan", "Bangkok", "youguess"),
stringsAsFactors = FALSE)
df1$city <- ifelse(grepl("Bangkok", df1$location) | grepl("Bangkok", df1$state),
"Bangkok","")
df1
# location state city
# 1 Bangkok Bangkok
# 2 Bangkok Metropolitan Bangkok
# 3 Central Thai Bangkok Bangkok
# 4 someth youguess
另请参阅?"|"
对于 |、& 和 xor 逻辑或原始向量。
对于||、&&和isTRUE,一个length-one逻辑向量。
您也可以将各列粘贴在一起
df$city <- ifelse(grepl("Bangkok", paste(df$location,df$state)),"Bangkok","")
我有一个数据框 (df),其中包含州和城市的 2 列数据。但是,有时 2 列中的数据会被调换或输入错误。数据框看起来像这样:
location state
Bangkok
Bangkok Metropolitan
Central Thai Bangkok
我想创建一个新列 "City",方法是将这两个列中的 'Bangkok' 提取到一个单独的列中。我可以通过类似的方式为一列执行此操作:
df$city <- ifelse(grepl("Bangkok",df$location),"Bangkok","")
但是,我想一次搜索至少 2 列或更多列,例如:
df$city <- ifelse(grepl("Bangkok",df$location||df$state),"Bangkok","")
这显然行不通。 'filter' 我认为在 plyr 中做了类似但相反的事情。
感谢任何帮助。谢谢!
您可以多次使用 grepl
。此外,您应该使用 |
而不是 ||
.
df1 <- data.frame(location=c("Bangkok", "", "Central Thai", "someth"),
state=c("", "Bangkok Metropolitan", "Bangkok", "youguess"),
stringsAsFactors = FALSE)
df1$city <- ifelse(grepl("Bangkok", df1$location) | grepl("Bangkok", df1$state),
"Bangkok","")
df1
# location state city
# 1 Bangkok Bangkok
# 2 Bangkok Metropolitan Bangkok
# 3 Central Thai Bangkok Bangkok
# 4 someth youguess
另请参阅?"|"
对于 |、& 和 xor 逻辑或原始向量。
对于||、&&和isTRUE,一个length-one逻辑向量。
您也可以将各列粘贴在一起
df$city <- ifelse(grepl("Bangkok", paste(df$location,df$state)),"Bangkok","")