如何编写if-else循环来添加列?

时间:2013-09-04 07:01:33

标签: r

我有这个数据

x1   
1A41 
5D12 
5B21 
8C12 

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

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

5 个答案:

答案 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