我是R的新手。现在我有一些奇怪的数据提供给我,如str(x)
所示,因为你可以看到每个新条目都被一个新列分隔(例如{ {1}}和$ sold.listPrice
),他们真的应该在同一列中。
如何轻松地遍历所有列和"聚合"将值分配到每个唯一列名称的单个列中,直到"分隔符"?手头的问题是最多可能有3000个唯一值,因此还需要聚合3000个唯一行。
代码输出
$ sold.listPrice.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