使用数据框时遇到以下问题。 我用
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
答案 0 :(得分:0)
如果缺少所有值(ifelse
),您可以使用apply
在all(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。
让你的代码更清晰。