2

我有这个数据

x1   
1A41 
5D12 
5B21 
8C12 

如果 x1 包含相应的字母,我想将 x2 列添加到写入 A、B、C 或 D 的数据中。

x1    x2
1A41  A
5D12  D
5B21  B
8C12  C
4

5 回答 5

5

您可以使用搜索和替换并删除与 A、B、C 和 D 不同的所有字母:

# example data
df <- data.frame(x1= c("1A41", "5B21", "5D12",  "8C12"))

df$x2 <- gsub('.*([A-D]).*','\\1',df$x1)
于 2013-09-04T08:35:15.940 回答
4

最方便的方法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
于 2013-09-04T09:08:55.517 回答
3

如果您不确定字母的位置,您可以使用类似

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)
于 2013-09-04T07:22:38.550 回答
2

就像是:

df$x2 <-substr(df$x1,2,2)

你不需要使用ifelse.

于 2013-09-04T07:09:00.800 回答
0

一种解决方案:

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
于 2013-09-04T07:11:32.313 回答