我试图从数据集的多个子集中收集一些数据,并需要创建一个数据框来收集结果.我的问题是不知道如何创建具有已定义列数的空数据框,而实际上没有数据放入其中.
collect1 <- c() ## i'd like to create empty df w/ 3 columns: `id`, `max1` and `min1`
for(i in 1:10){
collect1$id <- i
ss1 <- subset(df1, df1$id == i)
collect1$max1 <- max(ss1$value)
collect1$min1 <- min(ss1$value)
}
Run Code Online (Sandbox Code Playgroud)
我觉得这个问题非常愚蠢(我几乎觉得我之前已经问过它但是找不到它)但是非常感谢任何帮助.
aat*_*lob 112
一个数据帧是否NA可行?就像是:
data.frame(matrix(NA, nrow = 2, ncol = 3))
如果您需要更具体的关于数据类型,那么可能更喜欢:NA_integer_,NA_real_,NA_complex_,或NA_character_而不只是NA这是合乎逻辑
其他可能更具体的东西NAs是:
data.frame(matrix(vector(mode = 'numeric',length = 6), nrow = 2, ncol = 3))
模式可以是任何类型.看到?vector
Hon*_*Ooi 25
只需创建一个空向量的数据框:
collect1 <- data.frame(id = character(0), max1 = numeric(0), max2 = numeric(0))
Run Code Online (Sandbox Code Playgroud)
但是如果你事先知道你将要拥有多少行,那么你应该创建一个包含许多行的数据框.
flo*_*del 11
你可以这样做:
N <- 10
collect1 <- data.frame(id = integer(N),
max1 = numeric(N),
min1 = numeric(N))
Run Code Online (Sandbox Code Playgroud)
现在要小心,在其余代码中,您忘记使用行索引逐行填充data.frame.它应该是:
for(i in seq_len(N)){
collect1$id[i] <- i
ss1 <- subset(df1, df1$id == i)
collect1$max1[i] <- max(ss1$value)
collect1$min1[i] <- min(ss1$value)
}
Run Code Online (Sandbox Code Playgroud)
最后,我会说有很多选择可以做你想要完成的事情,有些会更有效率并且使用更少的打字.例如,您可以查看aggregate函数或ddply从plyr包中查看.
小智 8
如果您想要一个具有定义的行数和无列数的空数据框,这里有一个解决方案:
df = data.frame(matrix(NA, ncol=1, nrow=10)[-1]
Run Code Online (Sandbox Code Playgroud)
df = data.frame(matrix("", ncol = 3, nrow = 10)
Run Code Online (Sandbox Code Playgroud)