以下是只有一行的以下数据框。在大多数情况下,数据帧包含很多行,但是遇到一种特殊情况,即我只有一行。
library(reshape2)
temp <- structure(list(D0 = 0, D2 = 0, D14 = 0, D14 = 0, D14 = 8.1210458037618,
D14 = 16.4531432694911, D7 = 0, D0 = 0, D0 = 0, D14 = 0,
D0 = 0, D14 = 0, D7 = 12.9742361276578, D0 = 9.38010319990484,
D14 = 6.35545262547878, D2 = 0, D14 = 1.35569798573994, D7 = 13.340409178823,
D2 = 9.36805417941219, D2 = 15.432692223528, D14 = 0, D0 = 0,
D14 = 0, D7 = 6.09471835659014, D7 = 0, D2 = 0, D2 = 7.67135586471563,
D14 = 28.1073822991286, D14 = 0, D2 = 7.58819062711938, D7 = 0,
D0 = 1.5735281713825, D0 = 0, D7 = 1.86165503278318, D7 = 5.35571350639711,
D2 = 2.47400939410094, D14 = 21.3059220365934, D0 = 0, D7 = 8.69569412672166,
D0 = 0, D14 = 0, D2 = 0.531180424946459, D0 = 3.42867314180642,
D0 = 0, D2 = 0, D14 = 0, D7 = 0.775767964360802, D0 = 2.59382750787083,
D7 = 0.600664752805997, D2 = 7.35512462974749, D14 = 2.30110773119572,
D7 = 3.23850639812659, D0 = 0, D7 = 0.958981742285896, D2 = 3.84623208865623,
D2 = 2.70323099283864, D7 = 1.65260222673919, D0 = 0, D2 = 4.00782923944589,
D7 = 5.65802187007992, D0 = 0, D0 = 0, D7 = 0, phylum = structure(1L, .Label = "Acidobacteria", class = "factor")), row.names = 14L, class = "data.frame")
> temp
D0 D2 D14 D14 D14 D14 D7 D0 D0 D14 D0 D14 D7 D0 D14 D2 D14 D7 D2
14 0 0 0 0 8.121046 16.45314 0 0 0 0 0 0 12.97424 9.380103 6.355453 0 1.355698 13.34041 9.368054
D2 D14 D0 D14 D7 D7 D2 D2 D14 D14 D2 D7 D0 D0 D7 D7 D2
14 15.43269 0 0 0 6.094718 0 0 7.671356 28.10738 0 7.588191 0 1.573528 0 1.861655 5.355714 2.474009
D14 D0 D7 D0 D14 D2 D0 D0 D2 D14 D7 D0 D7 D2 D14 D7 D0
14 21.30592 0 8.695694 0 0 0.5311804 3.428673 0 0 0 0.775768 2.593828 0.6006648 7.355125 2.301108 3.238506 0
D7 D2 D2 D7 D0 D2 D7 D0 D0 D7 phylum
14 0.9589817 3.846232 2.703231 1.652602 0 4.007829 5.658022 0 0 0 Acidobacteria
我正在运行一个melt函数来按门类汇总数据,如下所示(接下来将使用ggplot绘制数据)
> reshape2::melt(temp,id="phylum")
phylum variable value
1 Acidobacteria D0 0
2 Acidobacteria D2 0
3 Acidobacteria D14 0
4 Acidobacteria D7 0
为什么我只能得到0个值???我希望酸性细菌的所有D0和酸性细菌的所有D2的总和,依此类推
> sum(temp[,colnames(temp) =="D0"])
[1] 16.97613
1 Acidobacteria D0 16.97613
2 Acidobacteria D2 60.9779
3 Acidobacteria D14 83.99975
4 Acidobacteria D7 83.99975
答案 0 :(得分:0)
您要查找的输出需要一个三个阶段的过程:1)重命名变量,2)融合数据,3)汇总数据。我们使用dplyr
和tidyr
软件包(或reshape2
,如果您热衷于该软件包)来完成此操作。
library(dplyr)
library(tidyr)
temp <- structure(list(D0 = 0, D2 = 0, D14 = 0, D14 = 0, D14 = 8.1210458037618,
D14 = 16.4531432694911, D7 = 0, D0 = 0, D0 = 0, D14 = 0,
D0 = 0, D14 = 0, D7 = 12.9742361276578, D0 = 9.38010319990484,
D14 = 6.35545262547878, D2 = 0, D14 = 1.35569798573994, D7 = 13.340409178823,
D2 = 9.36805417941219, D2 = 15.432692223528, D14 = 0, D0 = 0,
D14 = 0, D7 = 6.09471835659014, D7 = 0, D2 = 0, D2 = 7.67135586471563,
D14 = 28.1073822991286, D14 = 0, D2 = 7.58819062711938, D7 = 0,
D0 = 1.5735281713825, D0 = 0, D7 = 1.86165503278318, D7 = 5.35571350639711,
D2 = 2.47400939410094, D14 = 21.3059220365934, D0 = 0, D7 = 8.69569412672166,
D0 = 0, D14 = 0, D2 = 0.531180424946459, D0 = 3.42867314180642,
D0 = 0, D2 = 0, D14 = 0, D7 = 0.775767964360802, D0 = 2.59382750787083,
D7 = 0.600664752805997, D2 = 7.35512462974749, D14 = 2.30110773119572,
D7 = 3.23850639812659, D0 = 0, D7 = 0.958981742285896, D2 = 3.84623208865623,
D2 = 2.70323099283864, D7 = 1.65260222673919, D0 = 0, D2 = 4.00782923944589,
D7 = 5.65802187007992, D0 = 0, D0 = 0, D7 = 0, phylum = structure(1L, .Label = "Acidobacteria", class = "factor")), row.names = 14L, class = "data.frame")
# Append a suffix to the column names to make them unique
names(temp) = paste0(names(temp), '_', 1:ncol(temp))
# Melt the data
temp = gather(temp, key='variable', value='value', -phylum_64)
# Could alternatively use melt(temp, id='phylum_64')
# Remove the suffixes from the column names
temp$variable = gsub('_\\d+', '', temp$variable)
# Group by the prior column names and sum the values
temp = temp %>%
group_by(variable) %>%
summarise(value = sum(value))
variable value
1 D0 16.97613
2 D14 83.99975
3 D2 60.97790
4 D7 61.20697