在不引入 NA 的情况下保存长度不等的数据

Posted

技术标签:

【中文标题】在不引入 NA 的情况下保存长度不等的数据【英文标题】:save data with unequal lengths without introducing NA's 【发布时间】:2011-08-05 09:44:31 【问题描述】:

我有一个关于保存长度不等的数据框的问题。有没有办法在不引入 NA 或其他东西的情况下保存可变长度的表?这是一个 NA 的例子,但这不是我想要保存的。

x <- list(matrix(c(1,4,3,2), ncol = 2,                   
dimnames = list(c("A","B"), NULL)),            
matrix(c(23,9,4,4,22,54), ncol = 2,                   
dimnames = list(c("C","D","E"), NULL))) 

out <- lapply(x, rownames) 
foo <- function(x, max, repl = NA)      
if(length(x) == max)         
out <- x     
else          
out <- rep(repl, max)         
out[seq_along(x)] <- x     
     
out 
 
out <- lapply(out, foo, max = max(sapply(out, length))) 
(out <- do.call(rbind, out))

谢谢

【问题讨论】:

【参考方案1】:

我会创建一个列表并使用write 写入文件。还有其他可能性(请参阅?write 的帮助文件)。

myl <- list(a = letters[1:10], b = 1:3, c = "kaplah") #create some data

# for every element in the list (`myl`), write that element to a file
# and append if necessary. also, if list element is a character, write
# to as many columns as there are characters.
lapply(X = myl, FUN = function(x) 
    write(x, append = T, file = "test.txt", ncolumns = length(x))
)

结果是

a b c d e f g h i j
1 2 3
kaplah

【讨论】:

【参考方案2】:

数据框必须是矩形的。如果要存储可变长度数据,则需要使用列表。

是什么让您想要将数据存储在数据框中?

【讨论】:

不一定是数据框,我需要保存一个行数不相等的表。这可能吗? @Lisann,您可以将列表(一次每个元素)写入文件(请参阅?write,注意append = TRUE)。 @Roman 你能写一个例子吗?因为我不知道你到底是什么意思.. 感谢您的回答

以上是关于在不引入 NA 的情况下保存长度不等的数据的主要内容,如果未能解决你的问题,请参考以下文章

C#如何在不知道新数组长度的情况下将数组中的值保存到新数组中

asp.net中,在不播放视频的情况下如何获得视频长度

如何在不影响长度较小的数据的情况下减少html css中冗长数据的宽度?

基础练习 字符串对比

在不知道长度的情况下找到数组的中间

如何在不删除的情况下更改列 nvarchar 长度