我是这个社区的新手,目前正在一个R项目中,在该项目中,我需要在另一个数据帧的任何列上的一个数据帧中找到每个用逗号分隔的元素,下面是一个示例:>
#DataFrame1
a=c("AA,BB","BB,CC,FF","CC,DD,GG,FF","GG","")
df1=as.data.frame(a)
#DataFrame2
x=c("AA","XX","BB","YY","ZZ","MM","YY","CC")
y=c("DD""VV","NN","XX","CC","AA","WW","FF")
z=c("CC","AA","YY","GG","HH","OO","PP","QQ")
df2=as.data.frame(x,y,z)
我需要做的是查找(如果有任何元素),例如“ AA,BB”(这是df1
的x列中的第一个单元格)“ AA”是元素,而“ BB“是另一个元素,可以在df2
中的任何列(x,y,x)上使用,如果找到匹配项,我需要识别该行或多行,则可能会出现多个在df2
行上匹配
。希望我能很好地解释这个问题,请高手帮忙
答案 0 :(得分:0)
这是两个步骤的解决方案:
# load tidyverse
library(tidyverse)
步骤1:在新数据帧df1
中将由逗号分隔的元素与new_df
分开
1a)为此,我们首先确定要生成的列数
(以,
分隔的最大元素数;即:,
+ 1的最大元素数)
number_new_columns <- max(sapply(df1$a, function(x) str_count(x, ","))) + 1
1b)生成新的数据帧new_df
new_df <- df1 %>%
separate(a, c(as.character(seq_len(number_new_columns)))) # missing pieces will be filled with NA
# Above, we used c(as.character(seq_len(number_new_columns))) to generate column names as numbers -- not very creative :)
步骤2:确定new_df
中df2
中每个唯一元素的位置
(希望我正确理解了问题的第二部分)
2a)获取唯一元素(来自new_df
)
unique_elements <- unlist(new_df) %>%
unique()
2b)获取一个列表,该列表的组件包含df2
output <- lapply(unique_elements, function(x) {
which(df2 == x, arr.ind=TRUE)
})