创建具有相同列名

时间:2016-01-27 13:55:20

标签: arrays r matrix

如何从初始数据帧(包含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中的列。在。中提供的代码 对这篇文章的第一反应给了我一个包含名字的列表 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")))

1 个答案:

答案 0 :(得分:0)

我想我已经看到了你要做的事情......但是你尝试过的所有事情只会创建一个s标签字符串,而不是长度列表。

如何:with(ALL, paste("p",as.character(seq(1,s)),sep=""))

修改

通过更新的问题,你基本上得到了一个数据框,你想要获取一个列的子集并创建一个矩阵,这就是我如何建立一个表达式来实现它(有人觉得自由告诉我一个更好的方法!)

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

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

然后从中创建一个矩阵:

P <- data.matrix(temp)

当然,没有什么可以阻止你把所有这些结合起来:

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

希望有所帮助!