在R中向数据框添加列

3
在以下情况下,是否可以将列附加到数据框中?
dfWithData <- data.frame(start=c(1,2,3), end=c(11,22,33))
dfBlank <- data.frame()

如何将 dfWithData 中的列 start 添加到 dfBlank 中?

看起来应该在初始化数据帧时添加数据。我可以这样做:

dfBlank <- data.frame(dfWithData[1])

但我更感兴趣的是,是否可以将列添加到一个空的(但已初始化)表格中。


更重要的问题是,为什么要创建一个空的数据框,然后再尝试填充它呢?解决这个问题的"正确"方法很可能会完全避免这一步骤。 - joran
@joran:我可能错了。我只是在学习R语言。那么,您建议在初始化点执行此操作吗?即第二种方法。 - name_masked
可能吧。但是除非你退后一点并解释为什么要这样做,否则很难说。 - joran
@joran:好的,没问题。所以我正在使用RODBC查询数据库(返回数据框作为结果)。这个数据框包含来自数据库的4列(假设为A、B、C和D)。我需要从数据框中提取A、B、C和A、B、D列,并将它们粘贴到不同的Excel文件中。这就是为什么我创建了2个空数据框并填充了相应的列的原因。 - name_masked
3
只需从RODBC输出的数据框中选取子集: df[,c('A','B','D')],等等。 - joran
@joran:你能否在下面添加评论,以便我可以标记问题已回答? - name_masked
2个回答

2
dfBlank[1:nrow(dfWithData),"start"] <- dfWithData$start

对我似乎不起作用。我收到错误 Error in "$<-.data.frame"(tmp,"start",value= c(1, 2, 3)):替换有3行,数据为0 - name_masked
糟糕,我没有检查我的解决方案。回到起点重新开始吧。 - Blue Magister
@darkie15 编辑 - 你需要指定要更改的行号。现在试试看。 - Blue Magister
仍然不起作用!!我认为你不能引用首先不存在的列,即dfBlank$start - name_masked
我认为你是正确的。你需要用方括号进行子集操作。我已经再次编辑了。像joran所说,通常情况下你不会创建空数据框并填充它们的数据 - 你会在初始化时从read.csvdata.frame等函数中创建它们。 - Blue Magister
感谢您对答案的努力。但是我将选择joran的建议作为帖子的最终答案。 - name_masked

2
我建议您只需对从RODBC调用返回的数据框进行子集处理。可以采用以下方式:
df[,c('A','B','D')]

或者,您也可以使用它们的数字位置来子集化您想要的列,即

df[,c(1,2,4)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接