我是R语言编码的新手,在查找同一列中的两个名称时遇到麻烦。
更具体地说,我有一个包含行的表格,其中有一个名为“ fileName”的列,该列给出了不同颜色的名称。该表是由两个不同的表组合而成的,因此第一个表的颜色名称称为new_red,第二个表的颜色名称称为old_red。
我希望能够创建一个新列,该列表示如果字符集在fileName列中多次匹配,则在新列中为颜色所在的行写“匹配”。 new_是一种唯一的颜色,在没有old_的情况下,该颜色将写入“ No_new_match”,而对于旧颜色,它将写入“ No_old_match”。
我相信有一行代码会在名称后引用一定数量的数字/字符,即它将为new_xxx查找3个字符。我曾尝试像“ new \ d {3}”那样进行操作,但没有达到我的预期效果。
这里是我所指的例子
文件名
无旧匹配
我们将不胜感激,我为如何创建新表创建了新的列,例如表格,但是我在此部分遇到了麻烦。再次感谢您!
答案 0 :(得分:1)
这是使用正则表达式的一种方式:
fileName <- c("new_red", "new_blue", "new_green", "old_red", "old_purple")
color <- gsub("(new_)|(old_)", "", fileName)
color.freq <- table(color)
df <- data.frame(
fileName = fileName,
color = color,
match = ifelse(
color.freq[color] == 2,
"Match",
ifelse(
grepl("new", fileName),
"No_new_match",
"No_old_match"
)
)
)
fileName color match
1 new_red red Match
2 new_blue blue No_new_match
3 new_green green No_new_match
4 old_red red Match
5 old_purple purple No_old_match
答案 1 :(得分:0)
这里是dplyr
的一种方式-
df <- data.frame(fileName = c("new_red", "new_blue", "new_green", "old_red", "old_purple"),
stringsAsFactors = F)
df %>%
mutate(
Match = sapply(strsplit(fileName, "_"), "[", 2),
Match = duplicated(Match) | duplicated(Match, fromLast = T)
)
fileName Match
1 new_red TRUE
2 new_blue FALSE
3 new_green FALSE
4 old_red TRUE
5 old_purple FALSE
您可以根据需要对Match
列进行外观更改。