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函数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)
Colnames <- names(compData)
compData <- rbind(compData, c(5, 443))
names(compData) <- Colnames
Run Code Online (Sandbox Code Playgroud)
structure您可以使用带有参数的函数.Names:
compData <- structure(rbind(compData,c(5,443)), .Names = names(compData))
# A B
#1 5 443
Run Code Online (Sandbox Code Playgroud)