如何在 R 中将行添加到带有标题的空数据帧? [复制]
Posted
技术标签:
【中文标题】如何在 R 中将行添加到带有标题的空数据帧? [复制]【英文标题】:How to add rows to empty data frames with header in R? [duplicate] 【发布时间】:2012-09-18 19:50:33 【问题描述】:可能重复:R: losing column names when adding rows to an empty data frame
我创建了一个空数据框,列名如下
> compData <- data.frame(A= numeric(0), B= numeric(0))
> compData
[1] A B
<0 rows> (or 0-length row.names)
> compData <- rbind(compData,c(5,443))
> compData
X5 X443
1 5 443
在上面添加一行后,列名发生了变化。如何将新的行数据添加到数据框?
【问题讨论】:
【参考方案1】:添加到零行 data.frame
与添加到已包含行的 data.frame
的行为不同
来自?rbind
rbind 数据框方法首先删除所有零列和零行参数。 (如果没有留下任何内容,则返回第一个参数和列,否则返回零列零行数据框。)然后它从第一个数据框中获取列的类,并按名称(而不是按位置)匹配列.因子根据需要扩展其级别(按照遇到的因子的级别集的级别的顺序),当且仅当所有组件都是有序因子时,结果才是有序因子。 (最后一点与 S-PLUS 不同。)老式类别(带级别的整数向量)被提升为因子。
你有很多选择 --
最直接的
compData[1, ] <- c(5, 443)
更复杂
或者您可以将c(5,433)
强制转换为列表或data.frame
rbind(compData,setNames(as.list(c(5,443)), names(compData)))
或
rbind(compData,do.call(data.frame,setNames(as.list(c(5,443)), names(compData))))
但在这种情况下,你不妨这样做
do.call(data.frame,setNames(as.list(c(5,443)), names(compData)))
data.table 选项
您可以使用 data.table
函数 rbindlist
进行较少检查,从而保留第一个 data.frame 的名称
library(data.table)
rbindlist(list(compData, as.list(c(5,443))
【讨论】:
【参考方案2】:我只是有一个更简单的方法来做到这一点......如下
compData <- data.frame(A= numeric(0), B= numeric(0))
compData
compData[nrow(compData)+1, ] <- c(5, 443)
compData
【讨论】:
【参考方案3】:Colnames <- names(compData)
compData <- rbind(compData, c(5, 443))
names(compData) <- Colnames
【讨论】:
【参考方案4】:您可以通过索引分配给数据框:
compData <- data.frame(A= numeric(0), B= numeric(0))
compData
compData[1, ] <- c(5, 443)
compData
这给出了:
> compData <- data.frame(A= numeric(0), B= numeric(0))
> compData
[1] A B
<0 rows> (or 0-length row.names)
> compData[1, ] <- c(5, 443)
> compData
A B
1 5 443
【讨论】:
是否可以在不知道索引的情况下将行附加到数据框?因为有时很难知道我们必须更新哪些索引 @SurjyaNarayanaPadhi 是的。看我的回答。 @SurjyaNarayanaPadhi - 您的问题是具体,因为您要添加到一个空的 data.frame,因此您始终知道该行将从 1 开始【参考方案5】:您可以将函数 structure
与 .Names
参数一起使用:
compData <- structure(rbind(compData,c(5,443)), .Names = names(compData))
# A B
#1 5 443
【讨论】:
【参考方案6】:如果您有相同类型的数据*,您可以执行以下操作:
-
将实际数据框转换为矩阵。
as.matrix(compData)
将新行添加到末尾。rbind(as.matrix(compData), c(5,443))
将矩阵转换回数据框。as.data.frame(rbind(as.matrix(compData), c(5,443)))
简而言之:compData <- as.data.frame(rbind(as.matrix(compData), c(5,443)))
*如果您有相同类型的数据,您可能希望将它们保存在矩阵中。
【讨论】:
以上是关于如何在 R 中将行添加到带有标题的空数据帧? [复制]的主要内容,如果未能解决你的问题,请参考以下文章