创建长度不等的数据框
虽然数据框列必须具有相同的行数,但有什么方法可以创建长度不等的数据框。我对将它们保存为列表的单独元素不感兴趣,因为我经常必须通过电子邮件将此信息作为 csv 文件发送给人们,而作为数据框最简单。
x = c(rep("one",2))
y = c(rep("two",10))
z = c(rep("three",5))
cbind(x,y,z)
在上面的代码中,cbind()
函数只是回收较短的列,以便它们每列都有 10 个元素。我怎样才能改变它,使长度为 2、10 和 5。
我过去通过执行以下操作来完成此操作,但效率很低。
df = data.frame(one=c(rep("one",2),rep("",8)),
two=c(rep("two",10)), three=c(rep("three",5), rep("",5)))
While data frame columns must have the same number rows, is there any way to create a data frame of unequal lengths. I'm not interested in saving them as separate elements of a list because I often have to to email people this info as a csv file, and this is easiest as a data frame.
x = c(rep("one",2))
y = c(rep("two",10))
z = c(rep("three",5))
cbind(x,y,z)
In the above code, the cbind()
function just recycles the shorter columns so that they all have 10 elements in each column. How can I alter it just so that lengths are 2, 10, and 5.
I've done this in the past by doing the following, but it's inefficient.
df = data.frame(one=c(rep("one",2),rep("",8)),
two=c(rep("two",10)), three=c(rep("three",5), rep("",5)))
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
类似问题:
输出:
抛硬币后将出现 31 个正面和 19 个反面。然后尾部的其余部分将用 NA 填充以形成数据框。
Similar problem:
Output:
After the toss of the coin there will be 31 Head and 19 Tail. Then the rest of the tail will be filled with NA in order to make a data frame.
抱歉,这不完全是您所要求的,但我认为可能还有另一种方法来获得您想要的东西。
首先,如果向量的长度不同,那么数据就不是真正的表格,不是吗?将其保存到不同的 CSV 文件怎么样?您还可以尝试允许存储多个对象的 ascii 格式 (json ,XML)。
如果您觉得数据确实是表格形式的,您可以填充 NA:
如果您绝对必须制作一个具有不相等列的
data.frame
,您可能会破坏检查,后果自负:Sorry this isn't exactly what you asked, but I think there may be another way to get what you want.
First, if the vectors are different lengths, the data isn't really tabular, is it? How about just save it to different CSV files? You might also try ascii formats that allow storing multiple objects (json, XML).
If you feel the data really is tabular, you could pad on NAs:
If you absolutely must make a
data.frame
with unequal columns you could subvert the check, at your own peril:另一种填充方法:
na.pad()
函数利用了这样一个事实:如果您尝试索引不存在的元素,R 将自动用 NA 填充向量。makePaddedDataFrame()
只是找到最长的一个并将其余的填充到匹配的长度。Another approach to the padding:
The
na.pad()
function exploits the fact that R will automatically pad a vector with NAs if you try to index non-existent elements.makePaddedDataFrame()
just finds the longest one and pads the rest up to a matching length.要放大@goodside的答案,你可以这样做
To amplify @goodside's answer, you can do something like
您需要的是将 NA 填充到向量的末尾以匹配最长向量的长度,因此您可以执行以下操作:
What you need is to pad NAs to the end of the vector to match the length of the longest vector, so you can do:
我们可以通过用空字符“”填充列来创建包含不等长度列的数据框。以下代码可用于创建长度不等的数据框。
代码首先查找列表对象的最大列长度,l,然后用“”填充列。这将导致列表的每一列具有相同数量的元素。然后将该列表转换为数据框。
We can create a data frame containing columns of unequal lengths by padding the columns with empty character "". The following code can be used to create a data frame with unequal lengths
The code first finds the maximum column length of a list object, l Next the columns are padded with "". This will cause each column of the list to have the same number of elements. The list is then converted to a data frame.