我認爲這將有一個簡單的答案,但我無法解決它!這裏使用一個例子iris
數據集:如何合併R中的表?
a <- table(iris[,2])
b <- table(iris[,3])
我如何把這兩個表相加?例如,新輸出表中變量3的值爲27(26 + 1),變量3.3的值爲8(6 + 2)。
任何幫助非常感謝。
我認爲這將有一個簡單的答案,但我無法解決它!這裏使用一個例子iris
數據集:如何合併R中的表?
a <- table(iris[,2])
b <- table(iris[,3])
我如何把這兩個表相加?例如,新輸出表中變量3的值爲27(26 + 1),變量3.3的值爲8(6 + 2)。
任何幫助非常感謝。
,如果你想使用它們存在於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
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
+1好用的merge() –
這是另一個:
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
這裏的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,所以它可以迭代使用。
+1比我的好多了。 –
謝謝你。是否可以修改它以保持兩個數據集中不存在的值,並且只存在於一箇中?我需要一個包含所有**數據的總數,包括您的代碼顯示的合併常用值。 – JPD
@JPD查看我答案的更新。 –