解析,然后检查R中是否有更多
这是我的数据框中的三个特定列。我已经解析了name列,并根据其他值对它们进行排序。我现在正试图解析并获取具有第三个数字和第三个冒号的,然后将其余的移到底部 以下是我对该示例的预期输出:解析,然后检查R中是否有更多,r,parsing,R,Parsing,这是我的数据框中的三个特定列。我已经解析了name列,并根据其他值对它们进行排序。我现在正试图解析并获取具有第三个数字和第三个冒号的,然后将其余的移到底部 以下是我对该示例的预期输出: Name Parsed Rank WBA-Y*08:03:01 WBA-Y*08:03 1 WBA-Y*08:169 WBA-Y*08:169 2 WBA-Y*08:03:15 WBA-Y*08:03 3 WBA-Y*08
Name Parsed Rank
WBA-Y*08:03:01 WBA-Y*08:03 1
WBA-Y*08:169 WBA-Y*08:169 2
WBA-Y*08:03:15 WBA-Y*08:03 3
WBA-Y*08:03:02 WBA-Y*08:03 4
由于WBA-Y*08:169只有两个数字和一个冒号,因此将移到底部。我该怎么做?我可以使用gsub或sub吗
Name Parsed Rank
WBA-Y*08:03:01 WBA-Y*08:03 1
WBA-Y*08:03:15 WBA-Y*08:03 2
WBA-Y*08:03:02 WBA-Y*08:03 3
WBA-Y*08:169 WBA-Y*08:169 4
如果您想删除
v_Name
,可以在末尾添加%%>%select(-v_Name)
。这里有一个base R
选项来修复它。使用grepl
检查在“名称”列中字符串的末尾($
)有无两位数字后跟:
两次后跟一个或多个数字的模式,使用此选项对第一列和第二列进行排序并更新这些列
df = read.table(text = "
Name Parsed Rank
WBA-Y*08:03:01 WBA-Y*08:03 1
WBA-Y*08:169 WBA-Y*08:169 2
WBA-Y*08:03:15 WBA-Y*08:03 3
WBA-Y*08:03:02 WBA-Y*08:03 4
", header=T, stringsAsFactors=F)
library(tidyverse)
df %>%
mutate(v_Name = str_count(Name, ":")) %>% # count how many : you have for each Name value
arrange(desc(v_Name)) %>% # arrange descending by those counts
mutate(Rank = row_number()) # update rank to be the row number
# Name Parsed Rank v_Name
# 1 WBA-Y*08:03:01 WBA-Y*08:03 1 2
# 2 WBA-Y*08:03:15 WBA-Y*08:03 2 2
# 3 WBA-Y*08:03:02 WBA-Y*08:03 3 2
# 4 WBA-Y*08:169 WBA-Y*08:169 4 1
df[1:2]如果格式是这样的,那么您可以简单地计算每个值的:
。正如1:
表示2个数字,2:
表示3个数字,等等。对吗?UseMethod中的错误(“mutate_”):没有适用于“function”类对象的“mutate_”方法,因为v_Name存储的函数是正确的,所以这是没有意义的?当您尝试运行此示例或完整的数据集时,这是一个错误吗?这是一个很好的观点,我认为这是我的完整数据集,我将再次尝试此功能,非常有效,谢谢!你能给我解释一下这部分“(\\d{2}:){2}\\d+$”吗?还有,为什么它只减去grepl而不是grepl?@nathan默认情况下,order
按照从grepl
派生的逻辑向量的字母顺序,即FALSE
后跟TRUE
。我们可以使用discreating=TRUE
参数(默认值为FALSE
)或-
来更改顺序。\\d{2}
是两个数字,后面跟着:
因为它重复了两次,所以我们将它用括号括起来并使用{2}
df[1:2] <- df[order(-grepl("(\\d{2}:){2}\\d+$", df$Name)), 1:2]
df
# Name Parsed Rank
#1 WBA-Y*08:03:01 WBA-Y*08:03 1
#2 WBA-Y*08:03:15 WBA-Y*08:03 2
#3 WBA-Y*08:03:02 WBA-Y*08:03 3
#4 WBA-Y*08:169 WBA-Y*08:169 4
df <- structure(list(Name = c("WBA-Y*08:03:01", "WBA-Y*08:169", "WBA-Y*08:03:15",
"WBA-Y*08:03:02"), Parsed = c("WBA-Y*08:03", "WBA-Y*08:169",
"WBA-Y*08:03", "WBA-Y*08:03"), Rank = 1:4), .Names = c("Name",
"Parsed", "Rank"), class = "data.frame", row.names = c(NA, -4L))