如何在不考虑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