考虑:
df1 <- data.frame(
row.names = c('Obs1','Obs2','Obs3','Obs4'),
V1 = c(1,2,1,0),
V2 = c(0,0,1,0),
V3 = c(1,1,0,3))
df2 <- data.frame(
Group = c("A", "A", "B"),
Obs = c("Obs1", "Obs2", "Obs3"))
我希望将Group
df2
的每个df1
的观察值与Group
中的每个变量相匹配,并返回描述观察是否存在的数据框 - 最终成为能够分类df1
的{{1}}变量应该包括在内。构成Group
的所有观察必须具有值&gt; df1
中的df1
中的变量被视为Group
的一部分。{/ p>
output
Group V1 V2 V3
1 A 1 0 1
2 B 1 1 0
答案 0 :(得分:1)
这是一个快速的方法:
library(dplyr)
df1$Obs <- rownames(df1) # rownames are a pain, let's have a real column
# complains because of a factor in df1, but no biggie:
output <- inner_join(df1, df2)
output %>%
group_by(Group) %>%
summarize_at(
vars(starts_with('V')),
function (x) as.numeric(any(x>0))
)
这将提供您所需的输出。
答案 1 :(得分:1)
以下是一个使用data.table
加入&#39; Obs / rn&#39;的两个数据集的选项,按&#39; Group&#39;分组,检查any
是否为library(data.table)
setDT(df1, keep.rownames=TRUE)[df2, on = .(rn = Obs)
][, lapply(.SD, function(x) +any(x > 0)) , Group, .SDcols = V1:V3]
# Group V1 V2 V3
#1: A 1 0 1
#2: B 1 1 0
列
NVARCHAR