一句话需求:创建数据框并指定列名:R data.frame(..., colnames = c("a", "b", "c"))。

4
有没有更简单的方法(即只需一行代码而不是两行!)来执行以下操作:
results <- as.data.frame(str_split_fixed(c("SampleID_someusefulinfo.countsA" , "SampleID_someusefulinfo.countsB" , "SampleID_someusefulinfo.counts"), "\\.", n=2))
names(results) <- c("a", "b")

类似这样的内容:

results <- data.frame(str_split_fixed(c("SampleID_someusefulinfo.countsA" , "SampleID_someusefulinfo.countsB" , "SampleID_someusefulinfo.counts"), "\\.", n=2), colnames = c("a", "b"))

我经常这样做,希望能有一种方法让这个过程只需要一行代码。
如果在基本的data.frame中实现比较困难,也可以使用/data.table。
澄清一下:
我的期望输出(通过运行上面两行代码得到 - 我希望它只有一行代码!!!)是一个结构为数据框的结果:
results
                       a      b
1 SampleID_someusefulinfo countsA
2 SampleID_someusefulinfo countsB
3 SampleID_someusefulinfo  counts

我希望您能够做到以下几点:

  1. 从矩阵或其他内容中创建数据框(例如我在第一个示例中提供的 matrix(c(1,2,3,4),nrow=2,ncol=2) 的玩具代码)
  2. 同一行中指定我想要我的数据框列名为什么

@rawr 我的例子只是一个玩具,我通常会在其中有一个复杂的矩阵,而不是从一些随机数字中指定的东西。 - dvanic
1
疑惑的是,?matrix 没有提供帮助? - rawr
@jaimedash 我不是在尝试重命名 - 我是在尝试一行代码中创建并命名! - dvanic
我可能有点迟钝,但修改后的版本很清晰。 - jaimedash
2个回答

17

使用setNames()将其应用于一个data.frame中。

setNames(data.frame(matrix(c(1,2,3,4),nrow=2,ncol=2)), c("a","b"))
#  a b
#1 1 3
#2 2 4

?setNames

一个方便的函数,用于设置对象的名称并返回该对象。

> setNames
function (object = nm, nm) 
{
    names(object) <- nm
    object
}

非常感谢您!虽然这不是最美丽的代码(从新手阅读它可能无法意识到您正在同时创建数据框和设置名称),但我真的很喜欢它全部在同一行中的事实 - 所以在这个领域肯定会得到很多用途 :) !!! - dvanic

5
我们可以使用matrix中的dimnames选项,因为OP正在使用matrix创建数据。
data.frame(matrix(1:4, 2, 2, dimnames=list(NULL, c("a", "b"))))

或者

`colnames<-`(data.frame(matrix(1:4, 2, 2)), c('a', 'b'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接