如何从初始数据帧(包含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")))
答案 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="")])
希望有所帮助!