【发布时间】:2014-03-07 22:39:09
【问题描述】:
我有一个大型数据框,其中多列代表针对不同个体测量的不同变量。列的名称总是以数字开头(例如 1:18)。我想对 df 进行子集化并为每个人创建单独的 dfs。这是一个例子:
x <- as.data.frame(matrix(nrow=10,ncol=18))
colnames(x) <- paste(1:18, 'col', sep="")
我的真实 df 的列名是由个体 ID、变量名和度量数组成的(我对每个变量进行了 3 个度量)。因此,例如,我有个人 1 的度量 b(主体),然后在 df 中我将有 3 个名为:1b1、1b2、1b3 的列。最后,我有 10 个不同的区域(身体、头部、尾部、尾根、背部、侧面、腹部、喉咙、前臂、腿部)。因此,对于每个人,我有 30 列(10 个区域 x 每个区域 3 个度量)。所以我有多个以不同数字开头的变量,然后我想根据它们的唯一数字进行子集化。我尝试使用 grep:
partialName <- 1
df2<- x[,grep(partialName, colnames(x))]
colnames(x)
[1] "1col" "2col" "3col" "4col" "5col" "6col" "7col" "8col" "9col" "10col"
"11col" "12col" "13col" "14col" "15col" "16col" "17col" "18col"
我的问题在这里你可以看到它没有分开个人,因为 1 和 10 在子集中。换句话说,这会选择以 1 开头的所有人。 最终我想做的是遍历我所有的人 (1:18),为每个人创建新的 dfs。
【问题讨论】:
-
欢迎来到 SO。您能否提供
colnames并说明您的期望? -
感谢 Llopis 的回复。好的。在上面的示例中,我的列名是:[1]“1col”“2col”“3col”“4col”“5col”“6col”“7col”“8col”“9col”“10col”“11col”“12col”“13col” “14col” “15col” “16col” “17col” “18col” 我想返回不同的 dfs 子集,其中它们的名称以相同的数字开头。在上面的示例中,我将有 18 个新的 dfs,每个有 1 列、1col、2col、3cols 等等。清楚吗?
-
@user3293163 将这些内容编辑到问题中,而不是作为评论发布。
-
如果您的列名格式为 1_var1、2_var1、12_var10,那么您可以使用
melt获取长格式数据,然后使用colsplit将列名拆分为 2 个变量个人和措施。随后,您可以根据需要cast数据和/或split。 -
@user3293163 你的真实 colnames是什么样的,你能控制它们还是只是给定的。