绑定类似的列名(data.frame或list class)

时间:2015-07-22 11:22:38

标签: r

我是R的新手。现在我有一些奇怪的数据提供给我,如str(x)所示,因为你可以看到每个新条目都被一个新列分隔(例如{ {1}}和$ sold.listPrice),他们真的应该在同一列中。

如何轻松地遍历所有列和"聚合"将值分配到每个唯一列名称的单个列中,直到"分隔符"?手头的问题是最多可能有3000个唯一值,因此还需要聚合3000个唯一行。

代码输出

$ sold.listPrice.1

1 个答案:

答案 0 :(得分:0)

这可能是一个肮脏的解决方案,但如果总有相同数量的附加列,它应该可以工作。如果这种情况发生变化,此代码可能会失败。

df <- data.frame(a=rnorm(5), b=rnorm(5),c=rnorm(5),b.1=rnorm(5),c.1=rnorm(5),b.2=rnorm(5),c.2=rnorm(5))
df

addition_columns <- grep('.*\\.[0-9]+$', names(df), value=T)
original_columns <- unique(sub('(.*)\\.[0-9]+$', '\\1', addition_columns))
fitting_original_columns <- sub('(.*)\\.[0-9]+$', '\\1', addition_columns)
single_columns <- names(df)[!names(df) %in% c(addition_columns, original_columns)]

df2 <- data.frame(df[c(single_columns, original_columns)])
while(length(addition_columns) > 0) {
  jnk_df <- data.frame(df[single_columns],
                       df[addition_columns[match(original_columns, fitting_original_columns)]])
  names(jnk_df) <- c(single_columns, original_columns)
  addition_columns <- addition_columns[-match(original_columns, fitting_original_columns)]
  df2 <- rbind(df2, 
               jnk_df)
}
df2