R:避免在多列中使用max函数的list元素

时间:2013-11-28 11:08:58

标签: r dataframe max

使用数据框时遇到以下问题。 我用

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”,则它会粘贴包含所有列名称的list-element。有没有办法让它插入“未知”而不是。 NA是重要的,需要保留。

希望你能提供帮助。

编辑: 这是一个小例子:

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

答案 0 :(得分:0)

如果缺少所有值(ifelse),您可以使用applyall(is.na(x))内查看。在您的示例中:

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。

让你的代码更清晰。