我正在编写一个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
请注意,introC
和helpB
在NA
行中有零,而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。
答案 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。