【问题标题】:Make a matrix of s columns of a dataframe with same column names制作具有相同列名的数据框的 s 列矩阵
【发布时间】:2016-01-27 13:55:19
【问题描述】:

如何为初始数据帧(包含列 p1 到 ps)中的 s 个变量创建一个包含比例 p1 到 ps 的矩阵 P

这是一个 R 问题。我有一个包含变量 p1 的数据框 到 ps 以及其他变量。我想为 变量 p1 到 ps 从数据帧到矩阵 P 用于其他 例行公事。当我知道列数时,我可以很容易地做到这一点 s(在下面提供的示例中,s = 5)使用下面的代码(测试 对于五列示例,数据位于数据框 ALL_test 中)。

以下代码读取示例数据帧 ALL_test。

ALL_test <- data.frame(
x = c(50,75,45), p1 = c(1, 0, 0), p2 = c(0, .4, .1),  p3 = c(0, .2, .3),
p4 = c(0, .4, .1),  p5 = c(0, 0, .5)   
)
P <- with(ALL_test, cbind(p1, p2, p3, p4, p5))
colnames(P)<- c("p1","p2","p3","p4","p5")

输出 P 表明该解决方案在基于 在 s 的已知值 5 上,我希望的列数 转移到矩阵 P。

我想在我提供“s”的地方开发将返回的代码 矩阵 P 中的 s 列。 对这篇文章的第一个回复给了我一个包含名字的列表 p1 到 ps 但我看不到如何使用它来提取列
数据帧中的 p1 到 p5。

我知道这可能是微不足道的,但我无法对其进行排序。

我已经尝试过(所有这些都只是将 p1 字符串提供给 ps)

s <- 5
nam1 <- paste("p", 1:s, sep = "", collapse = ", ")      
nam1   # this returns "p1, p2, p3, p4, p5"
cat(nam1, "\n") # returns p1, p2, p3, p4, p5 but this does not work in 
P <- with(ALL, cbind(cat(nam1, "\n")))

【问题讨论】:

  • 请阅读this,同时请记住,在 SO 上发布问题时,您需要添加您使用的语言标签。

标签: arrays r matrix


【解决方案1】:

我想我明白你在做什么......但你尝试的一切只是创建一个 s 标签字符串,而不是长度 s 的列表。

怎么样:with(ALL, paste("p",as.character(seq(1,s)),sep=""))

编辑

对于更新后的问题,您基本上得到了一个数据框,您希望从中获取列的子集并从中创建一个矩阵,这就是我将如何构建一个表达式来做到这一点(有人随意告诉我一个更好的方法!)

子集数据框(使用我之前发布的代码作为%in 测试的向量):

temp&lt;-ALL_test[,colnames(ALL_test)%in%paste("p",as.character(seq(1,s)),sep="")]

然后从中创建一个矩阵:

P &lt;- data.matrix(temp)

自然没有什么能阻止你将所有这些组合成:

P &lt;-data.matrix(ALL_test[,colnames(ALL_test)%in%paste("p",as.character(seq(1,s)),sep="")])

【讨论】:

  • 啊对!您有一个 data.frame 和一个可重现的示例...将更新答案...
猜你喜欢
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多