繁体   English   中英

如何在添加响应值的同时将多个值组合成几个组?

[英]How can I combine many values into a few groups while adding their response value?

我希望标题在这里不要太混乱。 如果是这样,请告诉我如何使它更清楚,我会这样做。

我有 24 个数据集,每个数据集有 93 个观察值。 只有两个变量,一个因素(大小,一个数字)和它的响应(百分比,也是一个数字)。 因子值范围为 0-2000。 我想根据因子值(0-2、2-50 和 50-2000)将这 93 个观察值组合成三组,并查看每个组的总组合响应值。 我已经使用了尝试group_bysummarize的功能,但我有R相当新的,我在我头上。

这是我使用dput函数的数据示例

> dput(data2)
structure(list(run = c("1", "2", "3", "4", "5", "6", "7", "8", 
"9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", 
"20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", 
"31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", 
"42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", 
"53", "54", "55", "56", "57", "58", "59", "60", "61", "62", "63", 
"64", "65", "66", "67", "68", "69", "70", "71", "72", "73", "74", 
"75", "76", "77", "78", "79", "80", "81", "82", "83", "84", "85", 
"86", "87", "88", "89", "90", "91", "92", ""), size = c("0.375", 
"0.412", "0.452", "0.496", "0.545", "0.598", "0.656", "0.721", 
"0.791", "0.868", "0.953", "1.047", "1.149", "1.261", "1.385", 
"1.520", "1.668", "1.832", "2.011", "2.207", "2.423", "2.660", 
"2.920", "3.205", "3.519", "3.863", "4.240", "4.655", "5.110", 
"5.610", "6.158", "6.760", "7.421", "8.147", "8.943", "9.817", 
"10.78", "11.83", "12.99", "14.26", "15.65", "17.18", "18.86", 
"20.70", "22.73", "24.95", "27.39", "30.07", "33.01", "36.24", 
"39.78", "43.67", "47.94", "52.62", "57.77", "63.41", "69.61", 
"76.42", "83.89", "92.09", "101.1", "111.0", "121.8", "133.7", 
"146.8", "161.2", "176.9", "194.2", "213.2", "234.1", "256.9", 
"282.1", "309.6", "339.9", "373.1", "409.6", "449.7", "493.6", 
"541.9", "594.9", "653.0", "716.8", "786.9", "863.9", "948.3", 
"1041", "1143", "1255", "1377", "1512", "1660", "1822", "2000"
), percentage = c("0.013", "0.023", "0.034", "0.049", "0.061", 
"0.072", "0.083", "0.093", "0.10", "0.11", "0.12", "0.12", "0.13", 
"0.14", "0.14", "0.15", "0.15", "0.16", "0.17", "0.17", "0.18", 
"0.19", "0.20", "0.21", "0.22", "0.24", "0.25", "0.26", "0.28", 
"0.30", "0.31", "0.33", "0.35", "0.37", "0.39", "0.42", "0.45", 
"0.47", "0.50", "0.53", "0.56", "0.58", "0.59", "0.59", "0.58", 
"0.55", "0.52", "0.49", "0.46", "0.45", "0.45", "0.45", "0.44", 
"0.42", "0.38", "0.35", "0.32", "0.31", "0.33", "0.36", "0.42", 
"0.49", "0.59", "0.74", "0.94", "1.19", "1.49", "1.82", "2.18", 
"2.55", "2.94", "3.34", "3.78", "4.25", "4.73", "5.20", "5.60", 
"5.87", "5.93", "5.77", "5.37", "4.77", "4.03", "3.21", "2.36", 
"1.55", "0.81", "0.30", "0.056", "0.0044", "0", "0", "")), class = "data.frame", row.names = c(NA, 
-93L))

非常感谢您提供的任何帮助

看来您只是想根据某些条件对某些行进行子集化(至少对于问题的第一部分)。 您能否举例说明您期望的输出,以便我可以帮助您解决问题? 谢谢你。

你可以使用:

library(data.table)

data <- as.data.table(data)
data <- data[, size := as.numeric(size)]

group1 <- data[size <= 2,]
group2 <- data[size > 2 & size <= 50,]
group3 <- data[size > 50 & size <= 2000,]

输出示例:

tail(group1)
  run  size percentage
1:  13 1.149       0.13
2:  14 1.261       0.14
3:  15 1.385       0.14
4:  16 1.520       0.15
5:  17 1.668       0.15
6:  18 1.832       0.16

tail(group2)
   run  size percentage
1:  48 30.07       0.49
2:  49 33.01       0.46
3:  50 36.24       0.45
4:  51 39.78       0.45
5:  52 43.67       0.45
6:  53 47.94       0.44

tail(group3)
   run size percentage
1:  88 1255       0.30
2:  89 1377      0.056
3:  90 1512     0.0044
4:  91 1660          0
5:  92 1822          0
6:     2000           

由于您似乎在使用dplyrtidyverse ,因此可以使用dplyr对数据进行子集化:

group1 <- data %>% filter(size <= 2)
group2 <- data %>% filter(size > 2 & size <= 50)
group3 <- data %>% filter(size > 50 & size <= 2000)

您还可以使用 base R 中的subset()函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM