R 比较第一列中指定的组之间的交点
假设我有一个由三列组成的数据框:第一列指定一个功能的编号(例如颜色),第二列指定一个组,第三列指定该组中存在的功能(1)或该组中缺少的功能(0): 或:R 比较第一列中指定的组之间的交点,r,set-intersection,cross-product,R,Set Intersection,Cross Product,假设我有一个由三列组成的数据框:第一列指定一个功能的编号(例如颜色),第二列指定一个组,第三列指定该组中存在的功能(1)或该组中缺少的功能(0): 或: 无论如何,我需要对一个相当大的数据文件有一个更好的概述(原始文件有大约10组中的数百个特性)。tbltbl听起来像是一个表就是你想要的。首先,我们对行进行子集划分,使在那里列等于1,并删除第三列。然后我们在该子集上调用一个表 > ( tab <- table(d[d$is_there == 1, -3]) ) # g
无论如何,我需要对一个相当大的数据文件有一个更好的概述(原始文件有大约10组中的数百个特性)。
tbltbl听起来像是一个表
就是你想要的。首先,我们对行进行子集划分,使在那里
列等于1,并删除第三列。然后我们在该子集上调用一个表
> ( tab <- table(d[d$is_there == 1, -3]) )
# group
# feature a b
# blue 1 1
# green 1 1
# red 0 1
# yellow 0 0
组b也一样
听起来像是一个表格
就是你想要的。首先,我们对行进行子集划分,使在那里
列等于1,并删除第三列。然后我们在该子集上调用一个表
> ( tab <- table(d[d$is_there == 1, -3]) )
# group
# feature a b
# blue 1 1
# green 1 1
# red 0 1
# yellow 0 0
对b组同样如此,这会起作用吗
> tapply(d$feature[d$is_there==1],d$group[d$is_there==1], table)
$a
blue green red yellow
1 1 0 0
$b
blue green red yellow
1 1 1 0
这样行吗
> tapply(d$feature[d$is_there==1],d$group[d$is_there==1], table)
$a
blue green red yellow
1 1 0 0
$b
blue green red yellow
1 1 1 0
请尝试以下代码:
with(d, tapply(is_there, list(feature, group), sum))
# a b
#blue 1 1
#green 1 1
#red 0 1
#yellow 0 0
请尝试以下代码:
with(d, tapply(is_there, list(feature, group), sum))
# a b
#blue 1 1
#green 1 1
#red 0 1
#yellow 0 0
以以下数据帧为例:
myd <- data.frame(
feature=c("red","blue","green","yellow","red","blue","green","yellow"),
group=c(rep("a",4),rep("b",4)),
is_there=c(0,1,1,0,1,0,1,0))
从这里提取那些无处不在的东西是微不足道的
请注意,提供矩阵的任何其他解决方案都同样有效(tapply解决方案将更快)采用以下数据框:
myd <- data.frame(
feature=c("red","blue","green","yellow","red","blue","green","yellow"),
group=c(rep("a",4),rep("b",4)),
is_there=c(0,1,1,0,1,0,1,0))
从这里提取那些无处不在的东西是微不足道的
请注意,提供矩阵res
的任何其他解决方案都同样有效(tapply解决方案会更快)@Richard Scriven我不确定OP是否希望这样。可能是你的解决方案是双重的!!”不同于“!”?@aldorado它是双重否定。试试!d$在那里
和!!d$is_在那里
@aldorado这是一个将1和0转换为真和假的黑客。有些东西as.logical()
像well@Richard斯克里文我不确定这是否是OP想要的。可能是你的解决方案是双重的!!”不同于“!”?@aldorado它是双重否定。试试!d$在那里
和!!d$is_在那里
@aldorado这是一个将1和0转换为真和假的黑客。一些as.logical()
也会这样做。这并不表明两组中的任何一组都不存在黄色?也许我的问题问得不准确。@Richard Scriven+1您的表格比您的更干净mine@akrun-谢谢。你的名字也可以加回去<代码>表格(功能=d$功能[!!d$在那里],组=d$组[!!d$在那里])
。我想这取决于子集。哦,明白了。是的,我有个教授对桌子很着迷。哈哈。这并不是说两组中都没有黄色?也许我的问题问得不准确。@Richard Scriven+1您的表格比您的更干净mine@akrun-谢谢。你的名字也可以加回去<代码>表格(功能=d$功能[!!d$在那里],组=d$组[!!d$在那里])
。我想这取决于子集。哦,明白了。是的,我有个教授对桌子很着迷。哈哈。tapply
比table
快?@RichardScriventapply
比acast
快,table
给出了不同的结果(比如:不是你需要的结果)tapply
比table
快?@RichardScriventapply
比acast
快,table
给出了不同的结果(例如:不是您需要的结果)
with(d, tapply(is_there, list(feature, group), sum))
# a b
#blue 1 1
#green 1 1
#red 0 1
#yellow 0 0
myd <- data.frame(
feature=c("red","blue","green","yellow","red","blue","green","yellow"),
group=c(rep("a",4),rep("b",4)),
is_there=c(0,1,1,0,1,0,1,0))
require(reshape2)
res <- acast(myd,feature ~ group, fun=sum, value.var="is_there")
where <- factor(
colSums(res) - 2*diff(t(res)),
levels=c(-1,0,2,3),
labels=c("group2","nowhere","both","group1")
)
> res
a b
blue 1 0
green 1 1
red 0 1
yellow 0 0
> where
blue green red yellow
group1 both group2 nowhere
Levels: group2 nowhere both group1