目标:我正在尝试创建一个简单的摘要统计信息表,其中行是相同类型的变量,但是来自不同的数据集(并且具有不同的长度)。
问题:当我使用rbind或tribble来组合一个函数创建的行时,输出是奇数。
1。数据
Age1 <- data.frame(c(5, 10, 15, 20, 25))
colnames(Age1) <- c("Age")
Age2 <- data.frame(c(5, 10, 15))
colnames(Age2) <- c("Age")
Age3 <- data.frame(c(5, 10, 15, 20, 25, 30))
colnames(Age3) <- c("Age")
2。提取汇总统计数据的功能
我创建了一个提取摘要统计数据的函数(长度,平均值,标准差,最小值,最大值和数据框的名称):
summary.stats <- function(x, d){
RowName <- deparse(substitute(d))
N <- length(x[!is.na(x)])
Mu <- mean(x)
Sigma <- sd(x)
Min <- min(x, na.rm = T)
Max <- max(x, na.rm = T)
Row <- cbind(RowName, N, Mu, Sigma, Min, Max)
print(Row)
}
3A。使用tribble结合结果
然后我从每个数据集的函数运行中创建一个三角形。
tribble(
~ DF.Name, ~ N, ~ Mean, ~ St.Dev., ~ Min, ~ Max,
summary.stats(Age1$Age, Age1),
summary.stats(Age2$Age, Age2),
summary.stats(Age3$Age, Age3)
)
我收到以下结果:
RowName N Mu Sigma Min Max
[1,] "Age1" "5" "15" "7.90569415042095" "5" "25"
RowName N Mu Sigma Min Max
[1,] "Age2" "3" "10" "5" "5" "15"
RowName N Mu Sigma Min Max
[1,] "Age3" "6" "17.5" "9.35414346693485" "5" "30"
每行上方都会打印列名称。我想摆脱输出中的列名(可能除了列名的顶行之外)。
3B。使用rbind组合结果
我可以使用rbind而不是tribble来一起打印结果:
rbind(
summary.stats(Age1$Age, Age1),
summary.stats(Age2$Age, Age2),
summary.stats(Age3$Age, Age3)
)
然后我又一次得到一个奇怪的结果:
RowName N Mu Sigma Min Max
[1,] "Age1" "5" "15" "7.90569415042095" "5" "25"
RowName N Mu Sigma Min Max
[1,] "Age2" "3" "10" "5" "5" "15"
RowName N Mu Sigma Min Max
[1,] "Age3" "6" "17.5" "9.35414346693485" "5" "30"
RowName N Mu Sigma Min Max
[1,] "Age1" "5" "15" "7.90569415042095" "5" "25"
[2,] "Age2" "3" "10" "5" "5" "15"
[3,] "Age3" "6" "17.5" "9.35414346693485" "5" "30"
有关如何清理输出的任何建议将非常感谢!谢谢!
答案 0 :(得分:1)
这是一个似乎可以做你想要的解决方案。所做的更改:
print
调用。这是负责运行rbind cbind
更改为tibble
。这会创建一个数据框,比rbind
制作的字符向量更适合dplyr::bind_rows
(或cbind
)。这给出了:
summary.stats <- function(x, d){
RowName <- deparse(substitute(d))
N <- length(x[!is.na(x)])
Mu <- mean(x)
Sigma <- sd(x)
Min <- min(x, na.rm = T)
Max <- max(x, na.rm = T)
Row <- tibble(RowName, N, Mu, Sigma, Min, Max)
}
rbind(
summary.stats(Age1$Age, Age1),
summary.stats(Age2$Age, Age2),
summary.stats(Age3$Age, Age3)
)
# A tibble: 3 x 6
RowName N Mu Sigma Min Max
<chr> <int> <dbl> <dbl> <dbl> <dbl>
1 Age1 5 15.0 7.91 5.00 25.0
2 Age2 3 10.0 5.00 5.00 15.0
3 Age3 6 17.5 9.35 5.00 30.0