问题描述
我有一个包含 5 列的数据框:两列是日期时间,其余三列包含数据。我想使用循环或无视函数,使用包含数据的列的名称创建 3 个新数据框。 这是我拥有的列的示例: enter image description here
例如,我想创建新对象,每个对象都称为 11.Q.29
(或者如果有办法将其与文本结合,也欢迎该建议!),列日期和实际问,这样我就可以应用 Hydrostats 包。问题是是否有办法告诉 R 这样做,或者我必须为每一列手动执行?
预先感谢您的帮助!
解决方法
假设您有一个类似的数据框:
testing <- as.data.frame(matrix(sample(1:100,60,replace=TRUE),ncol=6))
names(testing) = c("date","time","10.Q.29","10.Q.30","10.Q.36","10.Q.63")
正如您所说,您想为特定列创建一个数据框。在这种情况下,目标是从第三个到第六个。
一种方法是只提取您想要的列:
posData = testing[,c(3:ncol(testing))]
为每个新数据框定义名称。请注意,我添加了一个前缀:
newDfName = paste("newDf",names(posData),sep="_")
然后,提取信息并通过使用为每列创建一个数据框
assign
:
for (i in 1:ncol(posData))
{
tmpDf = as.data.frame(posData[,i])
assign(newDfName[i],tmpDf)
}
您可以使用 ls()
来检查结果:
> ls()
[1] "i" "newDf_10.Q.29" "newDf_10.Q.30" "newDf_10.Q.36" "newDf_10.Q.63" "newDfName"
[7] "posData" "testing" "tmpDf"
>