我在几个月内没有使用过R,所以一些帮助回来会很棒。下面是我正在使用的示例电子表格。
基本上如果它是一个五个字母数字链,我想要前三个字符。 如果它是一个六个字母数字链,我想跳过第一个字母并获得它后面的三个字符。 如果它是一个四个数字链我只想要前两个数字。
是否可以将它们保存在同一列中并使用逗号开头打印,或者是否需要为每个作业ID创建不同的列?
答案 0 :(得分:2)
使用例如包含样本数据总是更好dput
。
您可以将两个嵌套ifelse
条件与gsub
一起使用。
以下是一些示例数据。
# Sample data
df <- structure(list(JobID = structure(c(1L, 3L, 2L), .Label = c("23D04, 17B51, 1B370",
"H1B331", "K23D13, 1203, 17B73"), class = "factor")), .Names = "JobID", row.names = c(NA,
-3L), class = "data.frame");
df;
# JobID
#1 23D04, 17B51, 1B370
#2 K23D13, 1203, 17B73
#3 H1B331
在JobID
上拆分列", "
。
# Split column entries on ", "
lst <- strsplit(as.character(df$JobID), ", ")
提取模式。
# Extract pattern
lst <- lapply(lst, function(x) ifelse(
nchar(x) == 6,
gsub("^\\w(\\w{3}).+$", "\\1", x),
ifelse(nchar(x) == 4,
gsub("^(\\d{2}).+", "\\1", x),
gsub("^(\\w{3}).+", "\\1", x))));
连接列表条目并存储在新列output
中。
df$output <- sapply(lst, paste0, collapse = ", ")
# JobID output
#1 23D04, 17B51, 1B370 23D, 17B, 1B3
#2 K23D13, 1203, 17B73 23D, 12, 17B
#3 H1B331 1B3