Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
R 从脚本中创建和填充每行的数据帧(即,不为列使用单独的向量)_R - Fatal编程技术网

R 从脚本中创建和填充每行的数据帧(即,不为列使用单独的向量)

R 从脚本中创建和填充每行的数据帧(即,不为列使用单独的向量),r,R,我试图从“记录”列表中创建一个数据帧,即每行(与加载CSV文件相比,但现在是从R脚本文件中),但我能找到的所有示例都是从包含单个列的向量创建数据帧 我发现最接近的情况是从一个空数据框开始,然后使用rbind和list添加行,但随后原始列名丢失,所有列都具有类字符 > generations <- data.frame(launch_date=as.Date(integer(), origin="1970-01-01"), generation=character(), strings

我试图从“记录”列表中创建一个数据帧,即每行(与加载CSV文件相比,但现在是从R脚本文件中),但我能找到的所有示例都是从包含单个列的向量创建数据帧

我发现最接近的情况是从一个空数据框开始,然后使用rbind和list添加行,但随后原始列名丢失,所有列都具有类字符

> generations <- data.frame(launch_date=as.Date(integer(), origin="1970-01-01"), generation=character(), stringsAsFactors=FALSE)
> generations
[1] launch_date generation 
<0 rows> (or 0-length row.names)
>世代
[1] 启动日期生成
(或长度为0的行名称)
这里一切都好。现在:

> generations <- rbind(generations,list("2010-09-01", "Generation 1"), stringsAsFactors=FALSE)
> generations
  X.2010.09.01. X.Generation.1.
1    2010-09-01    Generation 1
> str(generations)
'data.frame':   1 obs. of  2 variables:
 $ X.2010.09.01.  : chr "2010-09-01"
 $ X.Generation.1.: chr "Generation 1"
>世代
X.2010.09.01。第十代。
1 2010-09-01第一代
>str(世代)
“data.frame”:1个obs。共有2个变量:
$X.2010.09.01.:chr“2010-09-01”
$X.Generation.1.:chr“Generation 1”
原始列名和类已消失:(

想要这样做的原因是,在单独的向量中维护数据很麻烦,并且可能会出错。因此,这里的想法是使用一个rbind和一组列表,其中日期和名称可以一起维护(即,成对,每个“记录”/行)

如何进行此操作?

您使用
rbind
已进入(可能是众多方法中的一种)正确的轨道。列名丢失是因为您传递了
rbind
a
list
而不是
data.frame
。如果相反,我们传递了两个
data.frame
对象:

这是与示例中相同的初始化代码:

generations <- data.frame(launch_date=as.Date(integer(), origin="1970-01-01"), generation=character(), stringsAsFactors=FALSE)
现在

str(generations)
返回:

'data.frame':   0 obs. of  2 variables:
$ launch_date: 'Date' num(0) 
$ generation : chr 

我找到了一种更简单的方法来实现这一点,从矩阵开始,然后将其转换为数据帧:

generations_matrix <- matrix(data=c(
    "2014-04-01", "Generation 1",
    "2016-06-01", "Generation 2",
    "2018-01-01", "Generation 3"
    ), ncol = 2, dimnames=list(NULL,c("launch_date", "generation")), byrow=TRUE)
generations <- data.frame(
    launch_date=as.Date(generations_matrix[,1]), generation=generations_matrix[,2],
    stringsAsFactors=FALSE)

这正是我所寻找的:一种定义和维护每行数据框的方法。

使用此解决方案,我必须为每行(即每行)数据重复完整的data.frame语句;正确吗?(我正在寻找一种允许我维护日期字符串对的解决方案)您可以在循环或应用函数中使用它(每行不重复!)。或者在
rbind
步骤中完全忽略名称,并在最后添加它们。但是,您只能将日期列绑定到日期列,否则它们将成为字符(R总是返回到最通用的类型。所有内容都可以表示为字符串-这就是为什么您有类字符)
generations_matrix <- matrix(data=c(
    "2014-04-01", "Generation 1",
    "2016-06-01", "Generation 2",
    "2018-01-01", "Generation 3"
    ), ncol = 2, dimnames=list(NULL,c("launch_date", "generation")), byrow=TRUE)
generations <- data.frame(
    launch_date=as.Date(generations_matrix[,1]), generation=generations_matrix[,2],
    stringsAsFactors=FALSE)
> generations
  launch_date   generation
1  2014-04-01 Generation 1
2  2016-06-01 Generation 2
3  2018-01-01 Generation 3
> str(generations)
'data.frame':   3 obs. of  2 variables:
 $ launch_date: Date, format: "2014-04-01" "2016-06-01" ...
 $ generation : chr  "Generation 1" "Generation 2" "Generation 3"