R 将同一组函数应用于具有相同列标题的多个数据帧
我有一个大的数据帧DF,我将其分为6个分位数,并为每个分位数分配了一个DF,每个DF具有相同的头名称 我想对所有6个数据帧应用相同的函数,并创建一个结果DF,该DF保存每个DF索引的结果 例如,生成平均值、每列计数、获取每个变量的百分比(每列中变量的百分比)等等 这些行动在所有DF中都很常见 到目前为止,我手动执行此操作,如下所示R 将同一组函数应用于具有相同列标题的多个数据帧,r,dataframe,R,Dataframe,我有一个大的数据帧DF,我将其分为6个分位数,并为每个分位数分配了一个DF,每个DF具有相同的头名称 我想对所有6个数据帧应用相同的函数,并创建一个结果DF,该DF保存每个DF索引的结果 例如,生成平均值、每列计数、获取每个变量的百分比(每列中变量的百分比)等等 这些行动在所有DF中都很常见 到目前为止,我手动执行此操作,如下所示 res_df = data.frame ("col_headers" = c("names"), "df1_out" =
res_df = data.frame ("col_headers" = c("names"),
"df1_out" = c(sum(df1$C1)/nrow(df1),
sum(df1$C1)/nrow(df1),...
mean(df1$C1))
"df2_out" = c(sum(df2$C1)/nrow(df2),
sum(df2$C2)/nrow(df2),...
mean(df2$C1))
.
.
.
"df6_out" = c(sum(df6$C1)/nrow(df6),
sum(df6$C2)/nrow(df6),...
mean(df6$C1))
等等。为每个数据帧的每个变量分别手动创建一列。当列数增加时,这会造成问题
我想知道是否有一种方法可以自动化整个DF过程->分位数分割->分位数的DF列表->平均值,百分比(每行的贡献),等等->结果在新的DF->比较图中-/p>您可以用分位数创建一个因子变量,然后使用它分割()数据帧,如下图所示(iris示例):
>数据(“iris”)
>
>iris$quantiles lista mediaCol
>mediaCol
[2,2.7] (2.7,2.9] (2.9,3] (3,3.2] (3.2,3.42] (3.42,4.4]
萼片长度5.757576 6.220833 6.015385 5.954167 5.550000 5.520
萼片宽度2.493939 2.841667 3.000000 3.154167 3.366667 3.752
花瓣长度4.330303 4.754167 4.234615 3.770833 3.044444 2.052
花瓣宽度1.378788 1.545833 1.403846 1.2541671.0000000.508
列百分比贡献可以是:
> percCont <- lapply(lista, function(x) {
+ x[colnames(x) != c("Species", "quantiles")] <-
+ apply(x[colnames(x) != c("Species", "quantiles")], 2, function(y) {y / sum(y)})
+ return(x)
+ })
>
> percCont[1]
$`[2,2.7]`
Sepal.Length Sepal.Width Petal.Length Petal.Width Species quantiles
42 0.02368421 0.02794654 0.009097271 0.006593407 setosa [2,2.7]
54 0.02894737 0.02794654 0.027991603 0.028571429 versicolor [2,2.7]
58 0.02578947 0.02916160 0.023093072 0.021978022 versicolor [2,2.7]
60 0.02736842 0.03280680 0.027291812 0.030769231 versicolor [2,2.7]
61 0.02631579 0.02430134 0.024492652 0.021978022 versicolor [2,2.7]
63 0.03157895 0.02673147 0.027991603 0.021978022 versicolor [2,2.7]
68 0.03052632 0.03280680 0.028691393 0.021978022 versicolor [2,2.7]
69 0.03263158 0.02673147 0.031490553 0.032967033 versicolor [2,2.7]
70 0.02947368 0.03037667 0.027291812 0.024175824 versicolor [2,2.7]
73 0.03315789 0.03037667 0.034289713 0.032967033 versicolor [2,2.7]
80 0.03000000 0.03159174 0.024492652 0.021978022 versicolor [2,2.7]
81 0.02894737 0.02916160 0.026592022 0.024175824 versicolor [2,2.7]
82 0.02894737 0.02916160 0.025892232 0.021978022 versicolor [2,2.7]
83 0.03052632 0.03280680 0.027291812 0.026373626 versicolor [2,2.7]
84 0.03157895 0.03280680 0.035689293 0.035164835 versicolor [2,2.7]
88 0.03315789 0.02794654 0.030790763 0.028571429 versicolor [2,2.7]
90 0.02894737 0.03037667 0.027991603 0.028571429 versicolor [2,2.7]
91 0.02894737 0.03159174 0.030790763 0.026373626 versicolor [2,2.7]
93 0.03052632 0.03159174 0.027991603 0.026373626 versicolor [2,2.7]
94 0.02631579 0.02794654 0.023093072 0.021978022 versicolor [2,2.7]
95 0.02947368 0.03280680 0.029391183 0.028571429 versicolor [2,2.7]
99 0.02684211 0.03037667 0.020993702 0.024175824 versicolor [2,2.7]
102 0.03052632 0.03280680 0.035689293 0.041758242 virginica [2,2.7]
107 0.02578947 0.03037667 0.031490553 0.037362637 virginica [2,2.7]
109 0.03526316 0.03037667 0.040587824 0.039560440 virginica [2,2.7]
112 0.03368421 0.03280680 0.037088873 0.041758242 virginica [2,2.7]
114 0.03000000 0.03037667 0.034989503 0.043956044 virginica [2,2.7]
119 0.04052632 0.03159174 0.048285514 0.050549451 virginica [2,2.7]
120 0.03157895 0.02673147 0.034989503 0.032967033 virginica [2,2.7]
124 0.03315789 0.03280680 0.034289713 0.039560440 virginica [2,2.7]
135 0.03210526 0.03159174 0.039188244 0.030769231 virginica [2,2.7]
143 0.03052632 0.03280680 0.035689293 0.041758242 virginica [2,2.7]
147 0.03315789 0.03037667 0.034989503 0.041758242 virginica [2,2.7]
>percCont percCont[1]
$`[2,2.7]`
萼片。长萼片。宽花瓣。长花瓣。宽种分位数
42 0.02368421 0.02794654 0.009097271 0.006593407 setosa[2,2.7]
54 0.02894737 0.02794654 0.027991603 0.028571429花色[2,2.7]
58 0.02578947 0.02916160 0.023093072 0.021978022花色[2,2.7]
60 0.02736842 0.03280680 0.027291812 0.030769231花色[2,2.7]
61 0.02631579 0.02430134 0.024492652 0.021978022花色[2,2.7]
63 0.03157895 0.02673147 0.027991603 0.021978022花色[2,2.7]
68 0.03052632 0.03280680 0.028691393 0.021978022花色[2,2.7]
69 0.03263158 0.02673147 0.031490553 0.032967033花色[2,2.7]
70 0.02947368 0.03037667 0.027291812 0.024175824花色[2,2.7]
73 0.03315789 0.03037667 0.034289713 0.032967033花色[2,2.7]
80 0.03000000 0.03159174 0.024492652 0.021978022花色[2,2.7]
81 0.02894737 0.02916160 0.026592022 0.024175824花色[2,2.7]
82 0.02894737 0.02916160 0.02589232 0.021978022花色[2,2.7]
83 0.03052632 0.03280680 0.027291812 0.026373626花色[2,2.7]
84 0.03157895 0.03280680 0.035689293 0.035164835花色[2,2.7]
88 0.03315789 0.02794654 0.030790763 0.028571429花色[2,2.7]
90 0.02894737 0.03037667 0.027991603 0.028571429花色[2,2.7]
91 0.02894737 0.03159174 0.030790763 0.026373626花色[2,2.7]
93 0.03052632 0.03159174 0.027991603 0.026373626花色[2,2.7]
94 0.02631579 0.02794654 0.023093072 0.021978022花色[2,2.7]
95 0.02947368 0.03280680 0.029391183 0.028571429花色[2,2.7]
99 0.02684211 0.03037667 0.020993702 0.024175824花色[2,2.7]
102 0.03052632 0.03280680 0.035689293 0.041758242弗吉尼亚州[2,2.7]
107 0.02578947 0.03037667 0.031490553 0.037362637弗吉尼亚州[2,2.7]
109 0.03526316 0.03037667 0.040587824 0.039560440弗吉尼亚州[2,2.7]
112 0.03368421 0.03280680 0.037088873 0.041758242维吉尼亚[2,2.7]
114 0.03000000 0.03037667 0.034989503 0.043956044弗吉尼亚州[2,2.7]
119 0.04052632 0.03159174 0.048285514 0.050549451弗吉尼亚州[2,2.7]
120 0.03157895 0.02673147 0.034989503 0.032967033维吉尼亚[2,2.7]
124 0.03315789 0.03280680 0.034289713 0.039560440弗吉尼亚州[2,2.7]
135 0.03210526 0.03159174 0.039188244 0.030769231弗吉尼亚州[2,2.7]
143 0.03052632 0.03280680 0.035689293 0.041758242弗吉尼亚州[2,2.7]
147 0.03315789 0.03037667 0.034989503 0.041758242弗吉尼亚州[2,2.7]
可以使用unsplit()重新聚合数据帧:
>iris\u percCont
>头部(iris_percCont)
萼片。长萼片。宽花瓣。长花瓣。宽种分位数
1 0.03695652 0.03731343 0.02729045 0.015748031 setosa(3.42,4.4]
2 0.03132992 0.03846154 0.01271571 0.005479452 setosa(2.9,3]
3 0.03289013 0.04227213 0.01436464 0.006644518 setosa(3,3.2]
4 0.03219034 0.04095112 0.01657459 0.006644518 setosa(3,3.2]
5 0.03623188 0.03837953 0.02729045 0.015748031 setosa(3.42,4.4]
6 0.03913043 0.04157783 0.03313840 0.03149063 setosa(3.42,4.4]
此外,有许多绘制它的方法。函数lappy也可以帮助您
希望有帮助。您是否尝试过
dplyr::mutate
将数据帧拆分为多个数据帧,而不是使用dplyr::group_by?是的,我拆分它们的原因是这些单独的数据帧也需要单独分析,还需要相互比较以确定它们之间的差异因为每个数据帧代表一个分位数(比如15%括号)关于数据。你能提供一个数据帧的样本列表和dput
?谢谢你的回答。很抱歉,我认为我没有正确地回答这个问题。我确实把数据分成了分位数。我想应用一整套函数,从求均值到百分比再到绘制比较图。我想知道是否有一个y自动完成DF的整个过程->分位数分割->分位数的DF列表->平均值,每行的贡献百分比,等等->生成新的DF->比较图。到目前为止,我为每行执行一个步骤。我想尝试并自动完成这个过程。我还编辑了主要问题。希望措辞现在更加清晰。@sck I
> mediaCol <- sapply(lista, function(x) {
+ colMeans(x[colnames(x) != c("Species", "quantiles")])
+ })
>
> mediaCol
[2,2.7] (2.7,2.9] (2.9,3] (3,3.2] (3.2,3.42] (3.42,4.4]
Sepal.Length 5.757576 6.220833 6.015385 5.954167 5.550000 5.520
Sepal.Width 2.493939 2.841667 3.000000 3.154167 3.366667 3.752
Petal.Length 4.330303 4.754167 4.234615 3.770833 3.044444 2.052
Petal.Width 1.378788 1.545833 1.403846 1.254167 1.000000 0.508
> percCont <- lapply(lista, function(x) {
+ x[colnames(x) != c("Species", "quantiles")] <-
+ apply(x[colnames(x) != c("Species", "quantiles")], 2, function(y) {y / sum(y)})
+ return(x)
+ })
>
> percCont[1]
$`[2,2.7]`
Sepal.Length Sepal.Width Petal.Length Petal.Width Species quantiles
42 0.02368421 0.02794654 0.009097271 0.006593407 setosa [2,2.7]
54 0.02894737 0.02794654 0.027991603 0.028571429 versicolor [2,2.7]
58 0.02578947 0.02916160 0.023093072 0.021978022 versicolor [2,2.7]
60 0.02736842 0.03280680 0.027291812 0.030769231 versicolor [2,2.7]
61 0.02631579 0.02430134 0.024492652 0.021978022 versicolor [2,2.7]
63 0.03157895 0.02673147 0.027991603 0.021978022 versicolor [2,2.7]
68 0.03052632 0.03280680 0.028691393 0.021978022 versicolor [2,2.7]
69 0.03263158 0.02673147 0.031490553 0.032967033 versicolor [2,2.7]
70 0.02947368 0.03037667 0.027291812 0.024175824 versicolor [2,2.7]
73 0.03315789 0.03037667 0.034289713 0.032967033 versicolor [2,2.7]
80 0.03000000 0.03159174 0.024492652 0.021978022 versicolor [2,2.7]
81 0.02894737 0.02916160 0.026592022 0.024175824 versicolor [2,2.7]
82 0.02894737 0.02916160 0.025892232 0.021978022 versicolor [2,2.7]
83 0.03052632 0.03280680 0.027291812 0.026373626 versicolor [2,2.7]
84 0.03157895 0.03280680 0.035689293 0.035164835 versicolor [2,2.7]
88 0.03315789 0.02794654 0.030790763 0.028571429 versicolor [2,2.7]
90 0.02894737 0.03037667 0.027991603 0.028571429 versicolor [2,2.7]
91 0.02894737 0.03159174 0.030790763 0.026373626 versicolor [2,2.7]
93 0.03052632 0.03159174 0.027991603 0.026373626 versicolor [2,2.7]
94 0.02631579 0.02794654 0.023093072 0.021978022 versicolor [2,2.7]
95 0.02947368 0.03280680 0.029391183 0.028571429 versicolor [2,2.7]
99 0.02684211 0.03037667 0.020993702 0.024175824 versicolor [2,2.7]
102 0.03052632 0.03280680 0.035689293 0.041758242 virginica [2,2.7]
107 0.02578947 0.03037667 0.031490553 0.037362637 virginica [2,2.7]
109 0.03526316 0.03037667 0.040587824 0.039560440 virginica [2,2.7]
112 0.03368421 0.03280680 0.037088873 0.041758242 virginica [2,2.7]
114 0.03000000 0.03037667 0.034989503 0.043956044 virginica [2,2.7]
119 0.04052632 0.03159174 0.048285514 0.050549451 virginica [2,2.7]
120 0.03157895 0.02673147 0.034989503 0.032967033 virginica [2,2.7]
124 0.03315789 0.03280680 0.034289713 0.039560440 virginica [2,2.7]
135 0.03210526 0.03159174 0.039188244 0.030769231 virginica [2,2.7]
143 0.03052632 0.03280680 0.035689293 0.041758242 virginica [2,2.7]
147 0.03315789 0.03037667 0.034989503 0.041758242 virginica [2,2.7]
> iris_percCont <- unsplit(percCont, iris$quantiles)
>
> head(iris_percCont)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species quantiles
1 0.03695652 0.03731343 0.02729045 0.015748031 setosa (3.42,4.4]
2 0.03132992 0.03846154 0.01271571 0.005479452 setosa (2.9,3]
3 0.03289013 0.04227213 0.01436464 0.006644518 setosa (3,3.2]
4 0.03219034 0.04095112 0.01657459 0.006644518 setosa (3,3.2]
5 0.03623188 0.03837953 0.02729045 0.015748031 setosa (3.42,4.4]
6 0.03913043 0.04157783 0.03313840 0.031496063 setosa (3.42,4.4]