R 将同名的不同列合并为单个列

R 将同名的不同列合并为单个列,r,merge,dataframe,aggregate,R,Merge,Dataframe,Aggregate,我有一个data.frame,其中一些列具有相同的名称。现在我想将这些列合并/添加到单个列中。例如,我想转 v1 v1 v1 v2 v2 1 0 2 4 1 3 1 1 1 0 …变成 v1 v2 3 5 5 1 我只发现处理两个数据的线程。frame应该合并为一个,但没有一个线程处理这个(相当简单?)问题 可以使用以下方法重新创建数据: df <- structure(list(v1 = c(1L, 3L), v1 = 0:1, v1

我有一个
data.frame
,其中一些列具有相同的名称。现在我想将这些列合并/添加到单个列中。例如,我想转

v1 v1 v1 v2 v2 
 1  0  2  4  1
 3  1  1  1  0 
…变成

v1  v2
 3   5  
 5   1  

我只发现处理两个
数据的线程。frame
应该合并为一个,但没有一个线程处理这个(相当简单?)问题


可以使用以下方法重新创建数据:

df <- structure(list(v1 = c(1L, 3L), v1 = 0:1, v1 = c(2L, 1L), 
                v2 = c(4L, 1L), v2 = c(1L, 0L)), 
               .Names = c("v1", "v1", "v1", "v2", "v2"),  
               class = "data.frame", row.names = c(NA, -2L))
df
产生:

  v1 v2
1  3  5
2  5  1
split.default(…)
将数据帧拆分为具有相等列名的组,然后我们在这些组中的每个组上使用
Reduce
对组中每个列的值进行迭代求和,直到每个组只剩下一列(请参见
?Reduce
,这就是函数所做的),最后,我们使用
as.data.frame
将其转换回数据帧


我们必须使用
split.default
,因为
split
(或者实际上,
split.data.frame
,它将分派)在行而不是列上进行拆分。

您可以很容易地使用“重塑2”中的
melt
dcast
。由于没有“id”变量,我使用了
melt(as.matrix(df))
而不是
melt(df,id.vars=“id”)
。这会自动创建一个长版本的数据,其中“Var1”表示
行名
,而“Var2”表示
列名
。利用这些知识,您可以:

library(reshape2)
dcast(melt(as.matrix(df)), Var1 ~ Var2, 
      value.var = "value", fun.aggregate=sum)
#   Var1 v1 v2
# 1    1  3  5
# 2    2  5  1

欢迎来到StackOverflow!请提供。同意@Thomas,在这种情况下,我可以使用
read.table
重新创建您的数据表,但如果您有
dput
,情况会更好。谢谢您的回答,它现在可以工作了。下一次我当然会尝试提供一个可复制的例子!
library(reshape2)
dcast(melt(as.matrix(df)), Var1 ~ Var2, 
      value.var = "value", fun.aggregate=sum)
#   Var1 v1 v2
# 1    1  3  5
# 2    2  5  1