我试图重新整理一些数据,但遇到了一些问题,非常感谢您的任何建议或建议。
背景:我在一个叫做A的样本上测量了三个基因(FTH1,TFR1,VEGF)的值三次。第三次运行时对基因的一些测量没有被记录下来(这就是为什么有些基因有两个值,而另一些基因有三个值)。长格式数据如下:
Sample Gene Value
1 A FTH1 19.287
2 A FTH1 18.411
3 A TFR1 21.536
4 A TFR1 22.528
5 A TFR1 20.255
6 A VEGF 14.414
7 A VEGF 14.009我想将这些数据重塑为以下格式,以便更容易地进行下游分析:
Sample FTH1 TFR1 VEGF
A 19.287 21.2536 14.414
A 18.411 22.528 14.009
A N/A 20.255 N/A将数据重新格式化为上述表单的最佳方法是什么?
我尝试使用dcast,如下所示
library(reshape2)
library(tidyverse)
data = read.csv("data.csv")
dcast(data, Sample ~ Gene, value = "Value")但是遇到了以下错误:
Aggregation function missing: defaulting to length
Error in .fun(.value[0], ...) :
2 arguments passed to 'length' which requires 1我认为这是因为一些基因(即FTH1和血管内皮生长因子)有两个条目,而TFR1有三个条目--我不是100%确定。任何关于如何完成这种重塑的建议都将不胜感激!
发布于 2019-08-26 04:41:21
根据?reshape2::dcast的说法,使用情况是
drop dcast(数据,公式,fun.aggregate = NULL,...,
= NULL,subset = NULL,fill = NULL,drop= TRUE,value.var =guess_value(数据))
因此,参数是value.var
dcast(data, Sample ~ Gene, value.var = "Value")此外,由于存在重复的元素,因此需要序列列
library(data.table)
dcast(setDT(data), rowid(Gene) + Sample ~ Gene, value.var = "Value")[,
Gene := NULL][]
# Sample FTH1 TFR1 VEGF
#1: A 19.287 21.536 14.414
#2: A 18.411 22.528 14.009
#3: A NA 20.255 NA数据
data <- structure(list(Sample = c("A", "A", "A", "A", "A", "A", "A"),
Gene = c("FTH1", "FTH1", "TFR1", "TFR1", "TFR1", "VEGF",
"VEGF"), Value = c(19.287, 18.411, 21.536, 22.528, 20.255,
14.414, 14.009)), class = "data.frame", row.names = c(NA,
-7L))https://stackoverflow.com/questions/57649561
复制相似问题