[英]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_by
和summarize
的功能,但我有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
由于您似乎在使用dplyr
或tidyverse
,因此可以使用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.