我有一个数据框。我想比较两列的对和另外两列的对。每次列对的比较应基于将列1:2的条目与第2列的条目进行比较:1。如果这两个列对匹配,那么我希望频率计数与该对列相加。
z <- c(3,3,2)
y <- c(1,2,3)
x <- data.frame(y,z)
library(plyr)
fr <- count(x[,1:2])
fr
# The matched pair of 1:2 with 2:1
fr[3,1:2] == fr[2,2:1]
我想要的输出是包含匹配对的频率总和的数据帧。
y z freq
1 1 3 1
2 2 3 2
答案 0 :(得分:2)
我们可以使用base R
执行此操作。我们通过更改&#39; x&#39;来transform
数据集。最小值为&#39; y&#39;和&#39; z&#39;对于每一行(使用pmin
),&#39; z&#39;最大值为&#39; y&#39;和&#39; z&#39;对于每一行(使用pmax
),创建一个新列的频率&#39; freq&#39;以1为值。然后,使用xtabs
获取&#39;频率的sum
。由&#39; x&#39;并且&#39; y&#39; (默认情况下,xtabs
获取sum
),并转换为data.frame
(as.data.frame
)。
as.data.frame(xtabs(freq~., transform(x, y= pmin(y,z),
z= pmax(y,z), freq=1)))
# y z Freq
#1 1 3 1
#2 2 3 2
或者另一种选择是使用apply
,MARGIN=1
使用sort
元素和aggregate
循环使用sum
的行,以便将x[] <- t(apply(x, 1, sort))
aggregate(Freq~., transform(x, Freq=1), sum)
# y z Freq
#1 1 3 1
#2 2 3 2
分组为&# 39; Y&#39;和&#39; z&#39;
function createChart() {
$("#chart").kendoChart({
title: {
position: "bottom",
text: "Share of Internet Population Growth, 2007 - 2012"
},
legend: { visible: false },
chartArea: { background: "" },
seriesDefaults: {
labels: {
visible: true, background: "transparent", template: "#= category #: \n #= value#%"
}
},
series: [{
type: "pie",
overlay: { gradient: "none" },
startAngle: 150,
data: [{ category: "Asia", value: 53.8, color: "#9de219" },
{ category: "Europe", value: 16.1, color: "#90cc38" },
{ category: "Latin America", value: 11.3, color: "#068c35" },
{ category: "Africa", value: 9.6, color: "#006634" },
{ category: "Middle East", value: 5.2, color: "#004d38" },
{ category: "North America", value: 3.6, color: "#033939" }]
}],
tooltip: { visible: true, format: "{0}%" }
});
}
$(document).ready(createChart);