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