微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用重塑包装熔化数字列标题时,值会更改

如何解决使用重塑包装熔化数字列标题时,值会更改

我有一个看起来像这样的数据框:

colnames<-c('Assay','Sample','Interference','0','24','48','168')
Assay<-c('1','2','3','4','5','6','7','8','9')
Sample<-c('S1.16S','B2','B5','B32','B36','B39','B47','B57','A15')
Interference<-c('N','Y','N','Y')
'0'<-c(14.337,24.21,14.97,15.51,14.64,28.83,13.63,21.08,20.26)
'24'<-c(NA,25.13,14.99,15.35,14.71,28.64,13.68,22.04,20.64)
'48'<-c(NA,25.32,15.00,15.97,28.69,13.87,NA,22.14)
'168'<-c(NA,24.7,15.09,17.31,14.67,14.9,23.22,21.56)
d<-data.frame(Assay,Sample,Interference,24,48,168,check.names=FALSE)

当使用reshape软件包将数据融为长格式时,列0、24、48和168的值将更改为1-4,如下所示:

library(reshape)
dlong<-melt(d,id.vars=c('Assay','Interference'),measure.vars=c('0','168'))
dlong$variable<-as.numeric(dlong$variable)
head(dlong)
#  Assay Sample Interference variable value
#1     1 S1.16S            N        1     0
#2     2     B2            Y        1     0
#3     3     B5            N        1     0
#4     4    B32            N        1     0
#5     5    B36            N        1     0
#6     6    B39            Y        1     0

如何将数字值(0,168)保留在“变量”列中,而不必稍后使用其他代码进行转换?我需要对整个数据集进行下游相关性分析,这在我的处理时间上造成了相当大的滞后。

解决方法

我建议检查您的数据结构。您遇到的问题是由于因素结构造成的。为避免此问题,请在您的stringsAsFactors=F中添加data.frame()。接下来的代码可能对您有用:

library(reshape2)
#Data
colnames<-c('Assay','Sample','Interference','0','24','48','168')
Assay<-c('1','2','3','4','5','6','7','8','9')
Sample<-c('S1.16S','B2','B5','B32','B36','B39','B47','B57','A15')
Interference<-c('N','Y','N','Y')
'0'<-c(14.337,24.21,14.97,15.51,14.64,28.83,13.63,21.08,20.26)
'24'<-c(NA,25.13,14.99,15.35,14.71,28.64,13.68,22.04,20.64)
'48'<-c(NA,25.32,15.00,15.97,28.69,13.87,NA,22.14)
'168'<-c(NA,24.7,15.09,17.31,14.67,14.9,23.22,21.56)
d<-data.frame(Assay,Sample,Interference,24,48,168,check.names=FALSE,stringsAsFactors = F)
#Reshape
dlong<-melt(d,id.vars=c('Assay','Interference'),measure.vars=c('0','168'))

输出:

   Assay Sample Interference variable value
1      1 S1.16S            N        0     0
2      2     B2            Y        0     0
3      3     B5            N        0     0
4      4    B32            N        0     0
5      5    B36            N        0     0
6      6    B39            Y        0     0
7      7    B47            N        0     0
8      8    B57            Y        0     0
9      9    A15            Y        0     0
10     1 S1.16S            N       24    24
11     2     B2            Y       24    24
12     3     B5            N       24    24
13     4    B32            N       24    24
14     5    B36            N       24    24
15     6    B39            Y       24    24
16     7    B47            N       24    24
17     8    B57            Y       24    24
18     9    A15            Y       24    24
19     1 S1.16S            N       48    48
20     2     B2            Y       48    48
21     3     B5            N       48    48
22     4    B32            N       48    48
23     5    B36            N       48    48
24     6    B39            Y       48    48
25     7    B47            N       48    48
26     8    B57            Y       48    48
27     9    A15            Y       48    48
28     1 S1.16S            N      168   168
29     2     B2            Y      168   168
30     3     B5            N      168   168
31     4    B32            N      168   168
32     5    B36            N      168   168
33     6    B39            Y      168   168
34     7    B47            N      168   168
35     8    B57            Y      168   168
36     9    A15            Y      168   168
,

如果我们使用R版本> = 4.0.0,则默认选项为stringsAsFactors = FALSE,因此我们不必更改data.frame的构造

library(dplyr)
library(tidyr)
d %>% 
    pivot_longer(cols = `0`:`168`)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。