来自包含 NA 的 data.frame 的每一列的随机样本
Random samples from each column of a data.frame containing NAs
这是 的跟进。我想从 data.frame
的每一行独立于其他行抽取随机样本。 data.frame
可能包含给定 data.frame
df
.
中给出的 NA
set.seed(12345)
df1 <- c(rnorm(n=4, mean=0, sd=1), NA)
df2 <- rnorm(n=5, mean=10, sd=1)
df <- rbind(df1, df2)
t(apply(df, 1, sample, replace=TRUE))
[,1] [,2] [,3] [,4] [,5]
df1 0.5855288 NA -0.1093033 0.709466 NA
df2 9.7238159 9.723816 8.1820440 9.723816 10.6301
从第一行开始,我想 select 四个观察值(非空列)进行替换,从第二行开始,我想 select 五个观察值(非空列)进行独立替换从第一个 selection。但是我给定的代码 select 有五个从第一行替换的观察结果和五个从第二行替换的观察结果。
我猜你想 sample
只使用非 NA 值。在这种情况下,!is.na
可用于删除 NA 值,然后我们对剩余值进行 sample
。输出将是 list
('lst'),因为 sample
.
之后每一行的元素数量不同(4 和 5)
lst <- apply(df, 1, function(x) sample(x[!is.na(x)], replace=TRUE))
如果我们需要将 list
重新转换为 matrix
,我们可以在末尾附加 'NA' 以使每个 list
元素的长度相同,并且我们使用 rbind
将其转换回 matrix
.
do.call(rbind,lapply(lst, `length<-`, max(lengths(lst))))
这是 data.frame
的每一行独立于其他行抽取随机样本。 data.frame
可能包含给定 data.frame
df
.
set.seed(12345)
df1 <- c(rnorm(n=4, mean=0, sd=1), NA)
df2 <- rnorm(n=5, mean=10, sd=1)
df <- rbind(df1, df2)
t(apply(df, 1, sample, replace=TRUE))
[,1] [,2] [,3] [,4] [,5]
df1 0.5855288 NA -0.1093033 0.709466 NA
df2 9.7238159 9.723816 8.1820440 9.723816 10.6301
从第一行开始,我想 select 四个观察值(非空列)进行替换,从第二行开始,我想 select 五个观察值(非空列)进行独立替换从第一个 selection。但是我给定的代码 select 有五个从第一行替换的观察结果和五个从第二行替换的观察结果。
我猜你想 sample
只使用非 NA 值。在这种情况下,!is.na
可用于删除 NA 值,然后我们对剩余值进行 sample
。输出将是 list
('lst'),因为 sample
.
lst <- apply(df, 1, function(x) sample(x[!is.na(x)], replace=TRUE))
如果我们需要将 list
重新转换为 matrix
,我们可以在末尾附加 'NA' 以使每个 list
元素的长度相同,并且我们使用 rbind
将其转换回 matrix
.
do.call(rbind,lapply(lst, `length<-`, max(lengths(lst))))