在R中我需要什么样的连接?

时间:2018-05-03 13:31:53

标签: r dataframe

请先帮我解决一下这个问题。 要指出的是,我不知道我需要的正确的R术语。是"加入"一个正确的词?

set.seed(0)
df <- data.frame(a = sample(c(T,F), 10, replace=TRUE),
                 b = sample(c(T,F), 10, replace=TRUE),
                 c = sample(c(T,F), 10, replace=TRUE),
                 d = sample(c(T,F), 10, replace=TRUE))

a <- addmargins(table(df$a))
b <- addmargins(table(df$b))
c <- addmargins(table(df$c))
d <- addmargins(table(df$d))

这是数据

FALSE  TRUE   Sum 
    7     3    10 

FALSE  TRUE   Sum 
    4     6    10 

FALSE  TRUE   Sum 
    4     6    10 

FALSE  TRUE   Sum 
    5     5    10 

我想要的是使数据看起来像这样

   FALSE  TRUE   Sum 
a      7     3    10 
b      4     6    10 
c      4     6    10 
d      5     5    10 

听起来很简单,不是吗?我过去使用的是ddply。但我不知道如何使用ddply或其他任何内容。

2 个答案:

答案 0 :(得分:4)

这是一个简单的单行执行表命令,然后添加边距:

addmargins(t(sapply(df, table)))

#or this for just the row sums:
addmargins(t(sapply(df, table)), 2)

sapplytable函数应用于每列 t转换结果 {/ 1}}表示行/列总和

答案 1 :(得分:3)

这只是堆叠行,您需要rbind(对于&#34;绑定&#34;行在一起。cbind是列的等价物。)

rbind(a, b, c, d)
#   FALSE TRUE Sum
# a     7    3  10
# b     4    6  10
# c     4    6  10
# d     5    5  10

join 通常在您有一些共享列但有一些不同的列时完成,并且您希望组合数据以使共享列对齐,并保留不同的相应不同列。例如,如果您有一个人员和地址的数据框,以及人员和订单的另一个数据框,您可以将它们连接在一起,以查看哪个地址与哪个订单一致。在基础R中,使用merge命令完成连接。