我有这个数据
x1
1A41
5D12
5B21
8C12
如果 x1 包含相应的字母,我想将 x2 列添加到写入 A、B、C 或 D 的数据中。
x1 x2
1A41 A
5D12 D
5B21 B
8C12 C
我有这个数据
x1
1A41
5D12
5B21
8C12
如果 x1 包含相应的字母,我想将 x2 列添加到写入 A、B、C 或 D 的数据中。
x1 x2
1A41 A
5D12 D
5B21 B
8C12 C
您可以使用搜索和替换并删除与 A、B、C 和 D 不同的所有字母:
# example data
df <- data.frame(x1= c("1A41", "5B21", "5D12", "8C12"))
df$x2 <- gsub('.*([A-D]).*','\\1',df$x1)
最方便的方法str_extract_all
来自“stringr”包:
library(stringr)
mydf$x2 <- unlist(str_extract_all(mydf$x1, "[A-Z]"))
# x1 x2
# 1 1A41 A
# 2 5D12 D
# 3 5B21 B
# 4 8C12 C
如果您不确定字母的位置,您可以使用类似
df <- data.frame(x1)
pattern <- '[A-D]'
# match pos for each match
matches <- regexpr(pattern, df$x1)
# extract from match pos to match pos + 1
df$x2 <- substr(df$x1, matches ,matches+1)
就像是:
df$x2 <-substr(df$x1,2,2)
你不需要使用ifelse
.
一种解决方案:
a1 <- read.table(text="
1A41
5D12
5B21
8C12",header=F)
names(a1) <- c("x1")
a1$x2 <- substr(a1$x1,start=2,stop=2)
> a1
x1 x2
1 1A41 A
2 5D12 D
3 5B21 B
4 8C12 C