1

我一直在摸索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),如果没有找到值,您将如何处理?

4

2 回答 2

1

这很有效,如果没有找到字母,会给你一个警告。您也可以详细说明函数来捕获它。

apply(df, 1, function(x, vow) x[min(which(x %in% vow))], vow = vow)
[1] "A" NA  "O" "E"
于 2013-08-07T20:39:14.473 回答
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) 在 vow 中查找索引

于 2013-08-07T20:47:29.513 回答