我在R中有一个1246 x 60660数据帧.一段数据:

                     gene1             gene2              gene3
sample1          1615.7529         41.932474           697.9728
sample2           663.2001          8.602831          1198.1398
sample3          2406.1532         12.622443          1033.4625
sample4           836.3808         60.144235           259.3720
sample5          1217.8192         22.775497           695.9924
sample6           865.0344         15.350298           683.5397
sample7           935.3658         20.380676           540.6242
sample8           667.3883         56.939874          1056.6981

对于每个基因,我希望将每个样本的值放入以下组之一:

无=0

超低=1-4

低=5-100

中等=101-1000

高=1000&向上的

最终产品将是另一个矩阵/数据帧,看起来像这样:

                  gene1      gene2      gene3
none                  0          0          0 
ultra low             0          0          0
low                   0          8          0
medium                5          0          5
high                  3          0          3

我该怎么做?经过一点搜索,我想我最终可能会使用countaggregate?但我不确定如何将其应用于每一列.我看到的大多数例子都只计算一列.

推荐答案

使用cut可能更容易,即通过使用lapply循环指定每个列中的breaks和相应的labels,并使用table获得频率计数

sapply(df1, \(x) table(cut(x, breaks = c(0, 1, 5, 101, 1001, Inf), 
   labels = c("none", "ultra low", "low", "medium", "high"))))

-输出

           gene1 gene2 gene3
none          0     0     0
ultra low     0     0     0
low           0     8     0
medium        5     0     5
high          3     0     3

或者正如@ZheyuanLi提到的,tabulate可能更快

lbls <- c("none", "ultra low", "low", "medium", "high")
out <- sapply(df1, \(x) tabulate(cut(x, breaks = c(0, 1, 5, 101, 1001, Inf), 
   labels = lbls), nbins = length(lbls)))
row.names(out) <- lbls

-输出

> out
          gene1 gene2 gene3
none          0     0     0
ultra low     0     0     0
low           0     8     0
medium        5     0     5
high          3     0     3

数据

df1 <- structure(list(gene1 = c(1615.7529, 663.2001, 2406.1532, 836.3808, 
1217.8192, 865.0344, 935.3658, 667.3883), gene2 = c(41.932474, 
8.602831, 12.622443, 60.144235, 22.775497, 15.350298, 20.380676, 
56.939874), gene3 = c(697.9728, 1198.1398, 1033.4625, 259.372, 
695.9924, 683.5397, 540.6242, 1056.6981)), class = "数据.frame", 
row.names = c("sample1", 
"sample2", "sample3", "sample4", "sample5", "sample6", "sample7", 
"sample8"))

R相关问答推荐

是否可以通过另一个DF的内容过滤数据帧列表?

是否有R代码来判断一个组中的所有值是否与另一个组中的所有值相同?

如何在ggplot 2 geom_segment图表中将UTC转换为EET?

R的GG平行坐标图中的排序变量

从多个前置日期中获取最长日期

根据列表中项目的名称多次合并数据框和列表

如何使用按钮切换轨迹?

在R中使用数据集名称

IMF IFS数据以R表示

如何使用tryCatch执行语句并忽略警告?

线性模型斜率在减少原始数据时提供NA

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

SHINY:使用JS函数应用的CSS样式显示HTML表格

汇总数据的Sheffe检验的P值(平均值和标准差)

自定义gggraph,使geom_abline图层仅在沿x轴的特定范围内显示

从多层嵌套列表构建Tibble?

如果COLSUM为>;0,则COLNAME为向量

R中治疗序列的相对时间指数

抽样变换-REXP与RWEIBUR

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?