ค่าจะเปลี่ยนไปเมื่อละลายส่วนหัวคอลัมน์ตัวเลขโดยใช้แพ็คเกจที่ปรับรูปร่างใหม่

ฉันมี dataframe ที่มีลักษณะดังนี้:

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','N','N','Y','N','Y','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,14.64,28.69,13.87,NA,22.14)
'168'<-c(NA,24.7,15.09,17.31,14.67,NA,14.9,23.22,21.56)
d<-data.frame(Assay, Sample, Interference, 0,24,48,168, check.names=FALSE)

เมื่อใช้แพ็คเกจการปรับรูปร่างเพื่อละลายข้อมูลเป็นรูปแบบยาว ค่าของคอลัมน์ 0, 24, 48 และ 168 จะถูกเปลี่ยนเป็น 1-4 ดังนี้:

library(reshape)
dlong<-melt(d, id.vars=c('Assay','Sample','Interference'), measure.vars=c('0','24','48','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,24,48,168) ในคอลัมน์ 'ตัวแปร' โดยไม่ต้องใช้โค้ดเพิ่มเติมเพื่อแปลงในภายหลังได้อย่างไร ฉันจำเป็นต้องเรียกใช้การวิเคราะห์ความสัมพันธ์ดาวน์สตรีมกับชุดข้อมูลทั้งหมด และสิ่งนี้ทำให้เวลาในการประมวลผลของฉันค่อนข้างล่าช้า


person carrie maryak    schedule 25.08.2020    source แหล่งที่มา
comment
stackoverflow.com/questions/26391921/ หลังจากโพสต์ก่อนหน้านี้ ฉันสามารถแก้ไขปัญหาด้วยรหัสนี้ dlong$variable<-as.numeric(as.character(dlong$variable))   -  person carrie maryak    schedule 25.08.2020


คำตอบ (2)


ฉันขอแนะนำให้ตรวจสอบโครงสร้างข้อมูลของคุณ ปัญหาที่คุณพบคือเนื่องจากโครงสร้างปัจจัย เพื่อหลีกเลี่ยงปัญหานี้ ให้เพิ่ม 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','N','N','Y','N','Y','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,14.64,28.69,13.87,NA,22.14)
'168'<-c(NA,24.7,15.09,17.31,14.67,NA,14.9,23.22,21.56)
d<-data.frame(Assay, Sample, Interference, 0,24,48,168, check.names=FALSE,stringsAsFactors = F)
#Reshape
dlong<-melt(d, id.vars=c('Assay','Sample','Interference'), measure.vars=c('0','24','48','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
person Duck    schedule 25.08.2020

หากเราใช้เวอร์ชัน R ›= 4.0.0 ตัวเลือกเริ่มต้นคือ stringsAsFactors = FALSE ดังนั้นเราจึงไม่จำเป็นต้องเปลี่ยนในโครงสร้าง data.frame

library(dplyr)
library(tidyr)
d %>% 
    pivot_longer(cols = `0`:`168`)
person akrun    schedule 25.08.2020