在R中矩阵的单元格中查找和替换字符串
我正在尝试处理一项调查,其中一个问题要求受访者说出一个朋友的名字。现在我有一个这样的矩阵: 我想将这些结果保存在关系数据库中。我给每个人分配了一个唯一的ID,并希望答案保存为最后一个ID。因此,该表如下所示: 到目前为止,我的代码是: 我试过了在R中矩阵的单元格中查找和替换字符串,r,regex,relational-database,R,Regex,Relational Database,我正在尝试处理一项调查,其中一个问题要求受访者说出一个朋友的名字。现在我有一个这样的矩阵: 我想将这些结果保存在关系数据库中。我给每个人分配了一个唯一的ID,并希望答案保存为最后一个ID。因此,该表如下所示: 到目前为止,我的代码是: 我试过了 df$name %in% df$friends 没有任何结果。我现在尝试使用带有str_detect的for循环: friends <- df$friends names <- df$name for (i in 1:length(na
df$name %in% df$friends
没有任何结果。我现在尝试使用带有str_detect的for循环:
friends <- df$friends
names <- df$name
for (i in 1:length(names)) {
friends_called <- str_detect(friends, names[i])
id_index <- grep(names[i], df$name)
id <- df$id[id_index]
for (j in 1:length(friends_called)) {
if(friends_called[j] == T) {
df$friends_id[j] <- paste(df$friends_id[j], id, ",", sep="")
}
df$friends <- df$friends_id
friends您可以在tidyverse
中执行此操作,无需循环,如下所示:
df %>%
mutate(friends = map(friends, ~ df %>%
filter(str_detect(.x,name)) %>%
select(id) %>%
unlist() %>%
paste(collapse = ',')))
给予
或者使用base R,您可以使用sapply:
df$friends <- sapply(friends, function(x) paste(id[str_detect(x,name)],collapse = ','))
df$朋友谢谢!我已经使用了base R的代码,因为我还是一个新手,我想在我理解得更好的时候更深入地研究tinyverse。只要从tidyverse
开始,并将它与您已经知道的base R结合起来。最后,tidyverse
更容易理解和使用(至少对我来说)。
df$friends <- sapply(friends, function(x) paste(id[str_detect(x,name)],collapse = ','))