如何在R中使用标题向空数据框添加行?

Sur*_*dhi 37 row r add dataframe

可能重复:
R:在向空数据帧添加行时丢失列名

我创建了一个空数据框,其列名仅如下所示

> 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
Run Code Online (Sandbox Code Playgroud)

在上面添加一行后,列名称被更改.如何将新行数据添加到数据框?

mne*_*nel 29

添加到零行将data.frame与添加到data.frame已包含的行的行为不同

?rbind

rbind数据帧方法首先删除所有零列和零行参数.(如果没有,则返回带有列的第一个参数,否则为零列零行数据帧.)然后从第一个数据帧中获取列的类,并按名称(而不是按位置)匹配列.因子必须根据需要扩大其水平(按所遇因素的水平集的水平顺序),当且仅当所有组分都是有序因子时,结果才是有序因子.(最后一点与S-PLUS不同.)旧式类别(具有级别的整数向量)被提升为因子.

你有很多选择 -

最直截了当的

 compData[1, ] <- c(5, 443)
Run Code Online (Sandbox Code Playgroud)

更复杂

或者你可以强制c(5,433)列表或data.frame

rbind(compData,setNames(as.list(c(5,443)), names(compData)))
Run Code Online (Sandbox Code Playgroud)

要么

rbind(compData,do.call(data.frame,setNames(as.list(c(5,443)), names(compData))))
Run Code Online (Sandbox Code Playgroud)

但在这种情况下你不妨这样做

do.call(data.frame,setNames(as.list(c(5,443)), names(compData)))
Run Code Online (Sandbox Code Playgroud)

data.table选项

您可以使用较少检查的data.table函数rbindlist,从而保留第一个data.frame的名称

library(data.table)
rbindlist(list(compData, as.list(c(5,443))
Run Code Online (Sandbox Code Playgroud)


Sur*_*dhi 19

我只是有一个更简单的方法来做到这一点......如下

compData <- data.frame(A= numeric(0), B= numeric(0))
compData
compData[nrow(compData)+1, ] <- c(5, 443)
compData
Run Code Online (Sandbox Code Playgroud)


Mai*_*ura 5

Colnames <- names(compData)
compData <- rbind(compData, c(5, 443))
names(compData) <- Colnames
Run Code Online (Sandbox Code Playgroud)


Sve*_*ein 5

structure您可以使用带有参数的函数.Names

compData <- structure(rbind(compData,c(5,443)), .Names = names(compData))

#  A   B
#1 5 443
Run Code Online (Sandbox Code Playgroud)