在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])))