2013-11-28 48 views
0

我有以下問題與數據框一起工作。 我用R:避免多列中具有最大功能的列表元素

f11<-as.data.frame(cbind(row.names(f[,14:21]),apply(f[,14:21],1,function(x) names(f[,14:21])[which(x==max(x,na.rm=FALSE))]))) 

得到一個包含範圍coumns內最大值的列名,並將其寫入到一個單獨的數據幀。但是,如果範圍內的所有值均爲「NA」,則它將粘貼具有所有列名稱的列表元素。有沒有辦法讓它插入「未知」,而不是。 NA是重要的,需要保存。

希望你能幫上忙。

EDITS: 這裏的一個小例子:

a<-c(NA,1,NA) 
b<-c(NA,NA,NA) 
c<-c(1,NA,NA) 
d<-data.frame(a,b,c) 
d1<-as.data.frame(cbind(row.names(d[,1:3]),apply(d[,1:3],1,function(x) names(d[,1:3])[which(x==max(x,na.rm=TRUE))]))) 
d1$V3<-ifelse(nchar(d1$V2)>1,"unknown",d1$V2) #my idea on how to replace the list with "unknown" 
write.csv(d1,file="test.csv") 

我想保存文檔螺母有D1 $ V2看起來就像這個時候擺脫警告消息。在d [,1:3]中,只有一個值,而有兩個NA。

+1

請提供一個具有預期結果的可重現示例。 – agstudy

回答

0

如果缺少所有值(all(is.na(x))),則可以使用ifelse檢查apply。在您的例子:

a <- c(NA, 1, NA) 
b <- c(NA, NA, NA) 
c <- c(1, NA, NA) 
d <- data.frame(a,b,c) 
d1 <- apply(d, 1, function(x) ifelse(all(is.na(x)), "unknown", 
            names(d)[ which.max(x) ])) 
d1 <- as.data.frame(cbind(row.names(d), d1)) 

獎勵:您可以使用which.max(x),而不是which(max(x) == x)。它也處理NA。

讓你的代碼更清晰。