11

我想这会有一个简单的答案,但我无法解决!这是使用iris数据集的示例:

a <- table(iris[,2])
b <- table(iris[,3]) 

如何将这两个表加在一起?例如,在新输出表中,变量 3 的值为 27 (26+1),变量 3.3 的值为 8 (6+2)。

非常感谢任何帮助。

4

5 回答 5

9

如果您想使用同时存在于a和中的变量,这将起作用b

n <- intersect(names(a), names(b))
a[n] + b[n]

#  3 3.3 3.5 3.6 3.7 3.8 3.9   4 4.1 4.2 4.4 
# 27   8   8   5   4   7   5   6   4   5   5

如果要使用所有变量:

n <- intersect(names(a), names(b)) 

res <- c(a[!(names(a) %in% n)], b[!(names(b) %in% n)], a[n] + b[n])

res[order(names(res))] # sort the results
于 2012-10-15T14:06:52.947 回答
3
temp<-merge(a,b,by='Var1')
temp$sum<-temp$Freq.x + temp$Freq.y

   Var1 Freq.x Freq.y sum
1     3     26      1  27
2   3.3      6      2   8
3   3.5      6      2   8
4   3.6      4      1   5
5   3.7      3      1   4
6   3.8      6      1   7
7   3.9      2      3   5
8     4      1      5   6
9   4.1      1      3   4
10  4.2      1      4   5
11  4.4      1      4   5
于 2012-10-15T14:07:19.837 回答
3

这是另一个:

transform(merge(a,b, by="Var1"), sum=Freq.x + Freq.y)
   Var1 Freq.x Freq.y sum
1     3     26      1  27
2   3.3      6      2   8
3   3.5      6      2   8
4   3.6      4      1   5
5   3.7      3      1   4
6   3.8      6      1   7
7   3.9      2      3   5
8     4      1      5   6
9   4.1      1      3   4
10  4.2      1      4   5
11  4.4      1      4   5
于 2012-10-15T14:09:15.947 回答
2

这是解决方案的一个略微折磨的单行版本merge()

do.call(function(Var1, Freq.x, Freq.y) data.frame(Var1=Var1, Freq=rowSums(cbind(Freq.x, Freq.y))), merge(a, b, by="Var1"))

如果您想使用所有变量,这是一个:

do.call(function(Var1, Freq.x, Freq.y) data.frame(Var1=Var1, Freq=rowSums(cbind(Freq.x, Freq.y), na.rm=TRUE)), merge(a, b, by="Var1", all=TRUE))

与单线不同transform(),它不会累积 .x 和 .y,因此可以迭代使用。

于 2015-02-19T00:20:38.090 回答
1

data.table 包的合并功能可能就是你想要的:https ://rpubs.com/ronasta/join_data_tables

于 2019-07-24T19:21:29.720 回答