我正在尝试在' a'中获取列中的值对应于最大值od列' c',' d'并且' e'然后将其存储在矢量中。 我在下面写了一些代码,它给出了列' a'数据和两个NA。 有人可以帮助我使用sapply获取确切的数据。
a<-c('A','B','C','D','E')
b<-c(10,30,45,25,40)
c<-c(19,23,25,37,39)
d<-c(43,21,17,14,26)
e<-c(NA,23,45,32,NA)
df<-data.frame(a,b,c,d,e)
A1<-vector("character",3)
for (i in 3:5){
A1[i]<-c(df[which(df[,i]==max(df[,i],na.rm = TRUE)),1])
A1
}
实际结果:&gt; A1 [1]&#34;&#34; &#34;&#34; &#34; E&#34; &#34; A&#34; &#34; C&#34;
预期结果:A1应该有&#34; E&#34; &#34; A&#34; &#34; C&#34;
请使用sapply建议解决方案。
由于
答案 0 :(得分:0)
我们可以使用mapply
unname(mapply(function(x, y) x[which(y == max(y, na.rm = TRUE))], df[1], df[3:5]))
#[1] "E" "A" "C"
在循环中,索引从3:5开始,这是列的索引,而&#39; A1&#39;矢量对象初始化为3个元素。如果赋值从第3个元素开始,vector
只会附加新元素,同时保持前2个元素不变。
A1<-vector("character",3)
A1
#[1] "" "" ""
A2 <- A1
A2[3:5] <- 15
A2
#[1] "" "" "15" "15" "15" #### this is the same thing happening in the loop
相反,我们可以遍历序列,然后分配
i1 <- 3:5
for(i in seq_along(i1)) {
A1[i] <- df[which(df[,i1[i]]==max(df[,i1[i]],na.rm = TRUE)),1]
}
A1
#[1] "E" "A" "C"