cbind()在不同长度的矩阵上

时间:2018-05-29 21:05:25

标签: r loops matrix data-manipulation summary

我正在编写一个for循环,将一组向量的summary()输出转换为foo之类的矩阵,如下所示:

            introA   introB  introC  helpA    helpB   helpC
Min.        1        1        4       4       2       4
1st Qu.     5        5        5       5       4       5
Median      5        5        5       5       4       5
Mean        4.83     4.71     4.96    4.89    4.02    4.77
3rd Qu.     5        5        5       5       5       5
Max.        5        5        5       5       5       5
NA's        2        5        0       3       0       2

请注意,introChelpBNA行中有零,而summary()默认情况下不会生成此值 - 如果您在summary()上调用NA一个没有for值的向量,结果是一个长度为6而不是7的对象。

我的x循环初始化空矩阵summary,将数据框中每个数字向量的x结果分配给x,并绑定每个y }到一个更大的对象x <- matrix(NA,nrow=7,ncol=1) y <- NULL for(i in 1:ncol(foo)){ if(length(summary(foo[,i]==6))){ x <- as.matrix(c(summary(foo[,i]), 0)) rownames(x) <- c("Min.", "1st Qu.", "Median", "Mean", "3rd Qu.", "Max.", "NA's") }else if(length(summary(foo[,i]==7))){ x <- as.matrix(summary(foo[,i])) rownames(x) <- c("Min.", "1st Qu.", "Median", "Mean", "3rd Qu.", "Max.", "NA's") } y <- cbind(y,x) x <- matrix(NA,nrow=7,ncol=1) } 。这适用于所有数据帧,其中每个向量都没有缺失值或者所有向量都没有。

当某些向量缺少值而其他向量没有时,我写了这个解决方法:

summary()

在这里,我检查一个向量的Error in dimnames(x) <- dn : length of 'dimnames' [1] not equal to array extent 是否为长度为6或7,并且在将结果绑定在一起之前不添加一行。在我的循环之外,这是有效的。出于某种原因,当我尝试在循环中运行时出现以下错误:

summary()

关于我的长度如何不等于数组范围的任何想法?我已检查foo中所有向量的if (FirebaseAuth.getInstance().getCurrentUser() == null) { startActivityForResult( AuthUI.getInstance() .createSignInIntentBuilder() .setAvailableProviders(providers) .setLogo(R.drawable.shape_circle) .build(), RC_SIGN_IN); } 长度;所有都是长度6或7。

2 个答案:

答案 0 :(得分:1)

首先我们将iris数据集的列作为向量放在环境中,然后我们在其中一个中放入一些NAs:

list2env(iris[1:4],envir = globalenv())
Sepal.Length[1:3] <- NA

然后:

sapply(list(Sepal.Length = Sepal.Length,Sepal.Width = Sepal.Width,Petal.Length = Petal.Length,Petal.Width = Petal.Width),
       function(x) { x <- summary(x); if (is.na(x["NA's"])) x["NA's"] <- 0;x})

#         Sepal.Length Sepal.Width Petal.Length Petal.Width
# Min.        4.300000    2.000000        1.000    0.100000
# 1st Qu.     5.100000    2.800000        1.600    0.300000
# Median      5.800000    3.000000        4.350    1.300000
# Mean        5.862585    3.057333        3.758    1.199333
# 3rd Qu.     6.400000    3.300000        5.100    1.800000
# Max.        7.900000    4.400000        6.900    2.500000
# NA's        3.000000    0.000000        0.000    0.000000

答案 1 :(得分:0)

答案是:因为我的length()次来电不正确,我想说明的条件从来都不是真的。我把它们纠正到以下......

if(length(summary(tueAn[,i]))==6)

if(length(summary(tueAn[,i]))==7)

所有内容都点击了。 OOF。