R ::将行中变量的第一次出现作为新列返回

时间:2013-08-07 20:32:24

标签: r function character apply

我一直在使用apply函数笨手笨脚。我有一个单个字符值的列表,并希望返回第一个提到的元音。

a<- c("A","B","C","E")
b<- c("O","T","D","J")
c<- c("A","R","B","K")
d<- c("F","L","O","U")
e<- c("N","D","S","Z")

df <- data.frame(a,b,c,d,e)

我想创建一个新列,返回该行元音的第一个实例。

vow <- c("A","E","I","O","U")

结果将是(A,NA?,O,E),如果没有找到值,你将如何处理?

2 个答案:

答案 0 :(得分:1)

如果没有找到任何字母,这样可以发出警告。你也可以详细说明这个功能。

apply(df, 1, function(x, vow) x[min(which(x %in% vow))], vow = vow)
[1] "A" NA  "O" "E"

答案 1 :(得分:0)

> m <- apply(df, 1, match, table=vow)
> 
> i <- apply(m, 2, function(x) na.omit(x)[1])
> 
> vow[i]
[1] "A" NA  "O" "E"

分三步:

1)对每一行应用匹配,得到一个索引表(转置!)

2)从每列中获取第一个非NA

3)在誓言中查找索引