【发布时间】:2011-08-31 12:26:44
【问题描述】:
我想在 R 中创建一个具有 m(变量)列数(例如 30)和 2 行的 data.frame,并最初用 0 填充 data.frame 中的所有值。似乎 data.frame 根据行而不是列填充值,有什么建议我可以这样做吗?谢谢:)
【问题讨论】:
标签: r
我想在 R 中创建一个具有 m(变量)列数(例如 30)和 2 行的 data.frame,并最初用 0 填充 data.frame 中的所有值。似乎 data.frame 根据行而不是列填充值,有什么建议我可以这样做吗?谢谢:)
【问题讨论】:
标签: r
如果你想创建一个有一定行数的data.frame,并且你已经知道列名,你可以像这样定义make_df()函数:
make_df <- function(nrow) {
if (missing(nrow)) {
nrow <- 0
}
temp_df <- data.frame(
word = character(),
meaning_grouping = integer(),
part_of_speech = character(),
phonetic = character(),
audio = character(),
origin = character(),
definition = character(),
examples = character(),
synonyms = character(),
antonyms = character(),
stringsAsFactors = FALSE
)
if (nrow > 0) {
temp_df[1:nrow,] <- NA
}
temp_df
}
它允许您填充列名 和 列类(例如字符、整数、数字等)。
创建一个5行的data.frame,例如:
make_df(nrow=5)
word meaning_grouping part_of_speech phonetic audio origin definition examples synomyms antonyms
1 <NA> NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
2 <NA> NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
3 <NA> NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
4 <NA> NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
5 <NA> NA <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
或者创建一个 0 行的 data.frame:
make_df()
[1] word meaning_grouping part_of_speech phonetic audio origin definition examples
[9] synomyms antonyms
<0 rows> (or 0-length row.names)
【讨论】:
为了完整性:
按照 Chase 的回答,我通常使用 as.data.frame 将矩阵强制转换为 data.frame:
m <- as.data.frame(matrix(0, ncol = 30, nrow = 2))
编辑:speed test data.frame 与 as.data.frame
system.time(replicate(10000, data.frame(matrix(0, ncol = 30, nrow = 2))))
user system elapsed
8.005 0.108 8.165
system.time(replicate(10000, as.data.frame(matrix(0, ncol = 30, nrow = 2))))
user system elapsed
3.759 0.048 3.802
是的,它似乎更快(大约 2 倍)。
【讨论】:
m 真的需要成为 data.frame() 还是 matrix() 就足够了?
m <- matrix(0, ncol = 30, nrow = 2)
如果需要,您可以在其周围加上 data.frame():
m <- data.frame(m)
或全部在一行中:m <- data.frame(matrix(0, ncol = 30, nrow = 2))
【讨论】:
data.frame() 通常通过其 tag=value 参数按列指定数据。