如何在不考虑NA值的情况下返回多个列,并在R中用其他列名分组? 在这种情况下,我不需要考虑NA的情况,为此我尝试了这个< /P> mexico argentina italy spain england germany 1 1 2 NA NA 5 1 2 2 2 10 NA NA NA 3 5 2 10 11 10 NA 4 1 2 10 11 NA NA 5 NA NA NA 11 NA NA 6 1 2 10 11 12 10

如何在不考虑NA值的情况下返回多个列,并在R中用其他列名分组? 在这种情况下,我不需要考虑NA的情况,为此我尝试了这个< /P> mexico argentina italy spain england germany 1 1 2 NA NA 5 1 2 2 2 10 NA NA NA 3 5 2 10 11 10 NA 4 1 2 10 11 NA NA 5 NA NA NA 11 NA NA 6 1 2 10 11 12 10,r,dataframe,variables,R,Dataframe,Variables,在这种情况下,我不仅需要它考虑一行,还需要考虑所有行。 此外,每行分组需要放在新列中而不考虑。 值,因此最终的表必须如下所示: Mexico Argentina England Germany 1 1 2 5 1 有一些关于需要什么的问题,但如果您希望在每行中分别用以下非NA替换每个NA,则以下给出了该形式的矩阵: var1 var2 var3 var4 var5 var6 m

在这种情况下,我不仅需要它考虑一行,还需要考虑所有行。 此外,每行分组需要放在新列中而不考虑。 值,因此最终的表必须如下所示:

  Mexico Argentina England Germany
1      1         2       5       1

有一些关于需要什么的问题,但如果您希望在每行中分别用以下非NA替换每个NA,则以下给出了该形式的矩阵:

var1           var2          var3       var4     var5    var6
mexico    argentina       england    germany     null    null
mexico    argentina         italy       null     null    null 
mexico    argentina         italy      spain  england    null
mexico    argentina         italy      spain     null    null
spain      null             null       null      null    null
mexico    argentina         italy      spain england  germany
给予:

library(zoo)
t(apply(Data_Risk, 1, na.locf0, fromLast = TRUE))
t(apply(Data_Risk, 1, function(x) c(na.omit(x), rep(NA, sum(is.na(x))))))
或者,如果您希望将每行中的NAs移动到末尾:

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    5    5    5    1
[2,]    2    2   10   NA   NA   NA
[3,]    5    2   10   11   10   NA
[4,]    1    2   10   11   NA   NA
[5,]   11   11   11   11   NA   NA
[6,]    1    2   10   11   12   10
给予:

library(zoo)
t(apply(Data_Risk, 1, na.locf0, fromLast = TRUE))
t(apply(Data_Risk, 1, function(x) c(na.omit(x), rep(NA, sum(is.na(x))))))
或相当于:

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    5    1   NA   NA
[2,]    2    2   10   NA   NA   NA
[3,]    5    2   10   11   10   NA
[4,]    1    2   10   11   NA   NA
[5,]   11   NA   NA   NA   NA   NA
[6,]    1    2   10   11   12   10
我们可以使用apply row-wise,找出非NA索引,用列名替换它们,并用NA追加其余的索引

如果希望最终输出为数据帧,请将apply in data.frame包装起来

一个选择是看哪一个!is.naData_Risk,arr.ind=T并将其分摊到宽格式,用ordercol替换col变量,并添加colnm列作为分摊到长dcast过程中的value.var


谢谢你的支持!谢谢你的支持!
t(apply(Data_Risk, 1, function(x) "length<-"(na.omit(x), length(x))))
t(apply(Data_Risk, 1, function(x) {
    inds <- which(!is.na(x))
   c(names(Data_Risk)[inds], rep(NA,ncol(Data_Risk) - length(inds)))
}))

#        [,1]         [,2]     [,3]      [,4]      [,5]      [,6]     
#[1,] "mexico" "argentina" "england" "germany" NA        NA       
#[2,] "mexico" "argentina" "italy"   NA        NA        NA       
#[3,] "mexico" "argentina" "italy"   "spain"   "england" NA       
#[4,] "mexico" "argentina" "italy"   "spain"   NA        NA       
#[5,] "spain"  NA          NA        NA        NA        NA       
#[6,] "mexico" "argentina" "italy"   "spain"   "england" "germany"
library(data.table)
library(magrittr)

nms <- as.data.table(which(!is.na(Data_Risk), arr.ind = T))

nms[, .(colnm = names(Data_Risk)[col], col = paste0('var', order(col)))
    , by = row] %>% 
  dcast(row ~ col, value.var = 'colnm')

#    row   var1      var2    var3    var4    var5    var6
# 1:   1 mexico argentina england germany    <NA>    <NA>
# 2:   2 mexico argentina   italy    <NA>    <NA>    <NA>
# 3:   3 mexico argentina   italy   spain england    <NA>
# 4:   4 mexico argentina   italy   spain    <NA>    <NA>
# 5:   5  spain      <NA>    <NA>    <NA>    <NA>    <NA>
# 6:   6 mexico argentina   italy   spain england germany
library(dplyr)

nms <- as.data.frame(which(!is.na(Data_Risk), arr.ind = T))

nms %>% 
  group_by(row) %>% 
  mutate(colnm = names(Data_Risk)[col],
         col = paste0('var', order(col))) %>% 
  spread(col, value = colnm) %>% 
  ungroup