我一直在使用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),如果没有找到值,你将如何处理?
答案 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)在誓言中查找索引