在R中将数据帧转换为数字数据帧
这是我正在使用的数据帧:在R中将数据帧转换为数字数据帧,r,dataframe,R,Dataframe,这是我正在使用的数据帧: c1 = c('a', 'b', 'c', 'd') c2 = c('d', 'a', 'd', 'c') c3 = c('a', 'c', 'd', 'b') c4 = c('a', 'c', 'b', 'd') df = data.frame(c1, c2, c3, c4) c1 c2 c3 c4 a d a a b a c c c d d b d c b
c1 = c('a', 'b', 'c', 'd')
c2 = c('d', 'a', 'd', 'c')
c3 = c('a', 'c', 'd', 'b')
c4 = c('a', 'c', 'b', 'd')
df = data.frame(c1, c2, c3, c4)
c1 c2 c3 c4
a d a a
b a c c
c d d b
d c b d
我想用这个比例转换:a=1,b=2,c=3,d=4。
所以我得到了这样的结果:
c1 c2 c3 c4
1 4 1 1
2 1 3 3
3 4 4 2
4 3 2 4
这就是我想到的:
for(i in colnames(df)){
df$i = gsub("a", 1, df$i)
df$i = gsub("b", 2, df$i)
df$i = gsub("c", 3, df$i)
df$i = gsub("d", 4, df$i)
}
但它不起作用。我应该在这里使用gsub,还是有一种更简单的方法来实现这一点?我们可以用几种方法来实现这一点。一种方法是将
数据.frame
转换为矩阵
,然后匹配数据集中具有唯一
元素的那些。i、 e.在这种情况下,字母[1:4]
。但结果将是一个向量。我们可以通过指定dim
作为dim(df)
来将其转换为与原始数据集相同的dim
,即dim我们可以通过两种方式实现这一点。一种方法是将数据.frame
转换为矩阵
,然后匹配数据集中具有唯一
元素的那些。i、 e.在这种情况下,字母[1:4]
。但结果将是一个向量。我们可以通过指定dim
作为dim(df)
来将其转换为与原始数据集相同的dim
,即dim我们可以通过两种方式实现这一点。一种方法是将数据.frame
转换为矩阵
,然后匹配数据集中具有唯一
元素的那些。i、 e.在这种情况下,字母[1:4]
。但结果将是一个向量。我们可以通过指定dim
作为dim(df)
来将其转换为与原始数据集相同的dim
,即dim我们可以通过两种方式实现这一点。一种方法是将数据.frame
转换为矩阵
,然后匹配数据集中具有唯一
元素的那些。i、 e.在这种情况下,字母[1:4]
。但结果将是一个向量。我们可以通过将dim
指定为dim(df)
来将其转换为与原始数据集相同的dimensions
,也就是说dim确实不错,或多或少与我的想法完全一致,但在一行中这样做感觉有点像是在炫耀,你不觉得吗?:)把它分开并解释一下,我相信我会非常感激的。@akrun,dim@akrun,没关系,因为某种原因,在昏暗的环境中出现了这些。这就是为什么我想知道我是否见过这样的事情。@jasonadams我见过其他人用这种方式。但是,如果您不喜欢使用它,第二个是标准的,即使用matrix
调用。谢谢,@akrun,这很好。对于任何对DIM感兴趣的人来说,这真是太好了,或多或少也正是我的想法,但是在一行中这样做感觉有点像在炫耀,你不觉得吗?:)把它分开并解释一下,我相信我会非常感激的。@akrun,dim@akrun,没关系,因为某种原因,在昏暗的环境中出现了这些。这就是为什么我想知道我是否见过这样的事情。@jasonadams我见过其他人用这种方式。但是,如果您不喜欢使用它,第二个是标准的,即使用matrix
调用。谢谢,@akrun,这很好。对于任何对DIM感兴趣的人来说,这真是太好了,或多或少也正是我的想法,但是在一行中这样做感觉有点像在炫耀,你不觉得吗?:)把它分开并解释一下,我相信我会非常感激的。@akrun,dim@akrun,没关系,因为某种原因,在昏暗的环境中出现了这些。这就是为什么我想知道我是否见过这样的事情。@jasonadams我见过其他人用这种方式。但是,如果您不喜欢使用它,第二个是标准的,即使用matrix
调用。谢谢,@akrun,这很好。对于任何对DIM感兴趣的人来说,这真是太好了,或多或少也正是我的想法,但是在一行中这样做感觉有点像在炫耀,你不觉得吗?:)把它分开并解释一下,我相信我会非常感激的。@akrun,dim@akrun,没关系,因为某种原因,在昏暗的环境中出现了这些。这就是为什么我想知道我是否见过这样的事情。@jasonadams我见过其他人用这种方式。但是,如果您不喜欢使用它,第二个是标准的,即使用matrix
调用。谢谢,@akrun,这很好。对于任何对DIM感兴趣的人,如果您的键不连续,您可以使自己的键与下面的答案相似,如果您的键不连续,您可以使自己的键与下面的答案相似,如果您的键不连续,您可以制作自己的键,与下面的答案类似,如果您的键不是顺序键,您可以制作自己的键
df2 <- df
df2[] <- `dim<-`(match(as.matrix(df), letters[1:4]), dim(df))
df2
# c1 c2 c3 c4
#1 1 4 1 1
#2 2 1 3 3
#3 3 4 4 2
#4 4 3 2 4
v1 <- match(as.matrix(df), letters[1:4])
df2[] <- `dim<-`(v1, dim(df))
df2[] <- matrix(v1, ncol=ncol(df), row=nrow(df))
df2[] <-lapply(df, function(x) as.numeric(factor(x, levels=letters[1:4])))