我的数据框NumOrder1
包含以下5列:
ChannelN Order1 Order2 Order3 Order4 Order5
1 EXS 256 242 251 270 274
2 ISO 25 29 26 43 26
3 ISS 89 74 111 85 79
现在我使用转置NumbOrder2<-data.frame(t(NumOrder1))
来转换矩阵的列和行。现在我有了
X1 X2 X3
ChannelN EXS ISO ISS
Order1 256 25 89
Order2 242 29 74
Order3 251 26 111
Order4 270 43 85
Order5 274 26 79
然后我使用以下代码删除列名并替换第一行值:
colnames(NumbOrder2)<-NumbOrder1[,1]
NumbOrder3<-data.frame(NumbOrder2[-1,])
现在我得到了正确的桌子NumbOrder3
ChannelN EXS ISO ISS
Order1 256 25 89
Order2 242 29 74
Order3 251 26 111
Order4 270 43 85
Order5 274 26 79
但问题是:原始数据框中的列类是integer
但现在它是factor
。我无法使用这个新数据框绘制任何图表。我尝试转换与as.integer,但没有帮助。
保留原始数据框格式的任何解决方案?
答案 0 :(得分:1)
问题在于将t
转换为matix。矩阵只能在一个类上保存值。由于在data.frame
中有因子和整数,整数将被保存为矩阵中的因子。
要获得您想要的内容,请先设置rownames( NumOrder2 的名称),删除factor-column然后转置
rownames(NumOrder1) <- NumOrder1$ChannelN
NumOrder1 <- NumOrder1[,-1]
NumOrder2 <- as.data.frame(t(NumOrder1))
检查它们是否为整数:
> lapply(NumOrder2,class)
$EXS
[1] "integer"
$ISO
[1] "integer"
$ISS
[1] "integer"
答案 1 :(得分:1)
使用mapply
x <- "ChannelN EXS ISO ISS
Order1 256 25 89
Order2 242 29 74
Order3 251 26 111
Order4 270 43 85
Order5 274 26 79"
df <- read.table(text=x, header=T)
df$EXS <- mapply(as.integer, df$EXS)
df$ISO <- mapply(as.integer, df$ISO)
df$ISS <- mapply(as.integer, df$ISS)
df
# ChannelN EXS ISO ISS
# 1 Order1 256 25 89
# 2 Order2 242 29 74
# 3 Order3 251 26 111
# 4 Order4 270 43 85
# 5 Order5 274 26 79
答案 2 :(得分:1)
我们也可以使用recast
library(reshape2)
执行此操作
library(reshape2)
res <- recast(df1, variable~ChannelN, value.var='value')
res
# variable EXS ISO ISS
#1 Order1 256 25 89
#2 Order2 242 29 74
#3 Order3 251 26 111
#4 Order4 270 43 85
#5 Order5 274 26 79
str(res)
#'data.frame': 5 obs. of 4 variables:
#$ variable: Factor w/ 5 levels "Order1","Order2",..: 1 2 3 4 5
#$ EXS : int 256 242 251 270 274
#$ ISO : int 25 29 26 43 26
#$ ISS : int 89 74 111 85 79