【发布时间】:2018-05-07 21:44:12
【问题描述】:
我有两个数据框(df1 和 df2),这里是 df1:
SAMPLE NAMES
1_a
1_b
1_c
2_a
2_b
3_a
4_a
4_b
这里是df2:
ID GROUP
1 X
2 X
3 Y
4 Z
这就是我想要做的 - 我想在 df1 中添加一个新列,这将基于与 df2 的 ID 列的部分匹配来指示样本的组。因此,df1 中的样本“2_a”和“2_b”应该与 df2 中的“2”具有相同的组。
期望的输出:
SAMPLE NAMES GROUP
1_a X
1_b X
1_c X
2_a X
2_b X
3_a Y
4_a Z
4_b Z
到目前为止,我已经尝试使用 stringr 包并编写了一个 for 循环:
for (i in df1[, 1]){
for (j in df2$ID){
x <- which(str_detect(i,j))
class <- df2[j,1]
df1$group[i] <- class
}
}
但它一直给我错误:
UseMethod("type") 中的错误: 没有适用于“类型”的方法应用于“c('integer', 'numeric')”类的对象
我做错了什么?另外,有没有办法使用 apply() 函数而不是循环来做到这一点?
【问题讨论】: