Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
as.character()应用于data.frame的单个元素与整个';第'行;数据帧的_R - Fatal编程技术网

as.character()应用于data.frame的单个元素与整个';第'行;数据帧的

as.character()应用于data.frame的单个元素与整个';第'行;数据帧的,r,R,我有这样一个data.frame: df<-data.frame(x=c(1,2,3),y=c('b','a','c')) 我的结果是输出“1”和“2” 我知道,对于上面列出的最后一个命令,R给出了字符“b”的因子级别 但是,为什么前两个命令不这样做呢 当我以.character()的形式输入时,R实际上在“内部”做什么?不管是什么,我认为这是不同输出的原因 提前感谢我不确定as.character()的内部结构。 但这或许可以解决问题: df我不确定as.character()的内部结

我有这样一个data.frame:

df<-data.frame(x=c(1,2,3),y=c('b','a','c'))
我的结果是输出
“1”和“2”

我知道,对于上面列出的最后一个命令,R给出了字符“b”的因子级别

但是,为什么前两个命令不这样做呢

当我以.character()的形式输入
时,R实际上在“内部”做什么?不管是什么,我认为这是不同输出的原因


提前感谢

我不确定as.character()的内部结构。 但这或许可以解决问题:
df我不确定as.character()的内部结构。
但这或许可以解决问题:
df也许你可以试试

> c(as.matrix(df[1,]))
[1] "1" "b"

也许你可以试试

> c(as.matrix(df[1,]))
[1] "1" "b"


我将尝试一步一步地指导您我对R内发生的事情的印象:

data.frames实际上是列表: 由于data.frames实际上是列表,因此data.frames的一行是一个列表,其元素数量与data.frames中的列数量相同:

df[1, , drop = TRUE]
取消列表 当您试图将列表强制为向量时,您将
取消列表()
它。''unlist()`如果不是所有元素都是同一类型的,则它本身会通过某个hirarch强制这些元素。正如unlist帮助页面中的值部分所示:

输出类型是在将成对列表强制到列表之后,根据层次结构NULL 我是什么类型的? 在这种情况下,它必须将double和integer值强制为最高类型,即double。这是因为因子实际上存储为整数。检查下面的代码,在何种情况下发生了什么,我们处理的是哪种类型:

df <- data.frame(x = c(1, 2, 3),
                 y = c('b','a','c'))
class(df$x)
typeof(df$x)
class(df$y)
typeof(df$y)
unlist(df[1, , drop = TRUE])
typeof(unlist(df[1, , drop = TRUE]))


df <- data.frame(x = 1:3, # this returns integers
                 y = c('b','a','c'))
class(df$x)
typeof(df$x)
class(df$y)
typeof(df$y)
unlist(df[1, , drop = TRUE])
typeof(unlist(df[1, , drop = TRUE]))


df我将尝试一步一步地指导您我的印象是R内发生了什么:

data.frames实际上是列表: 由于data.frames实际上是列表,因此data.frames的一行是一个列表,其元素数量与data.frames中的列数量相同:

df[1, , drop = TRUE]
取消列表 当您试图将列表强制为向量时,您将
取消列表()
它。''unlist()`如果不是所有元素都是同一类型的,则它本身会通过某个hirarch强制这些元素。正如unlist帮助页面中的值部分所示:

输出类型是在将成对列表强制到列表之后,根据层次结构NULL 我是什么类型的? 在这种情况下,它必须将double和integer值强制为最高类型,即double。这是因为因子实际上存储为整数。检查下面的代码,在何种情况下发生了什么,我们处理的是哪种类型:

df <- data.frame(x = c(1, 2, 3),
                 y = c('b','a','c'))
class(df$x)
typeof(df$x)
class(df$y)
typeof(df$y)
unlist(df[1, , drop = TRUE])
typeof(unlist(df[1, , drop = TRUE]))


df <- data.frame(x = 1:3, # this returns integers
                 y = c('b','a','c'))
class(df$x)
typeof(df$x)
class(df$y)
typeof(df$y)
unlist(df[1, , drop = TRUE])
typeof(unlist(df[1, , drop = TRUE]))


df谢谢,这帮了大忙。现在我明白了为什么将as.character()应用于强制向量会产生与将as.character()应用于单个单元格不同的结果。有趣的是,如果我使用边距为1的apply函数,则“as.character”会给出不同的结果(即“1”“b”而不是“1”“2”)。我假设对边距为1的数据帧应用函数会将每一行强制为一个向量,如上所述。也许不是。。我将把这作为一个单独的问题发布。再次感谢这是因为apply()通过as.matrix()将数据帧转换为矩阵。请参阅as.matrix()的帮助:as.matrix是一个通用函数。如果只有原子列和任何非(数字/逻辑/复杂)列,数据帧的方法将返回字符矩阵,将as.vector应用于因子,并将format应用于其他非字符列。谢谢,这是一个很大的帮助。现在我明白了为什么将as.character()应用于强制向量会产生与将as.character()应用于单个单元格不同的结果。有趣的是,如果我使用边距为1的apply函数,则“as.character”会给出不同的结果(即“1”“b”而不是“1”“2”)。我假设对边距为1的数据帧应用函数会将每一行强制为一个向量,如上所述。也许不是。。我将把这作为一个单独的问题发布。再次感谢这是因为apply()通过as.matrix()将数据帧转换为矩阵。请参阅as.matrix()的帮助:as.matrix是一个通用函数。如果只有原子列和任何非-(数字/逻辑/复杂)列,则数据帧的方法将返回字符矩阵,并将as.vector应用于因子,将format应用于其他非字符列。谢谢。我在问题中给出的data.frame只是一个例子。实际的data.frame要大得多,并且包含因子列,如果可以避免的话,我不想强制将其转换为字符。谢谢你,谢谢你。我在问题中给出的data.frame只是一个例子。实际的data.frame要大得多,并且包含因子列,如果可以避免的话,我不想强制将其转换为字符。谢谢你,我很感激。谢谢你,我可以先强迫matrix,那样行得通。谢谢你,我可以先强迫matrix,那样行得通。