我有这个数据
x1
1A41
5D12
5B21
8C12
如果x1包含相应的字母,我想在写入A,B,C或D的数据中添加一列x2。
x1 x2
1A41 A
5D12 D
5B21 B
8C12 C
答案 0 :(得分:5)
您可以使用搜索&替换并删除与A,B,C& A不同的所有字母。 d:
# example data
df <- data.frame(x1= c("1A41", "5B21", "5D12", "8C12"))
df$x2 <- gsub('.*([A-D]).*','\\1',df$x1)
答案 1 :(得分:4)
最方便的方法是来自“stringr”包的str_extract_all
:
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
答案 2 :(得分: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)
答案 3 :(得分:2)
类似的东西:
df$x2 <-substr(df$x1,2,2)
您无需使用ifelse
。
答案 4 :(得分: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