Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中矩阵的单元格中查找和替换字符串_R_Regex_Relational Database - Fatal编程技术网

在R中矩阵的单元格中查找和替换字符串

在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

我正在尝试处理一项调查,其中一个问题要求受访者说出一个朋友的名字。现在我有一个这样的矩阵:

我想将这些结果保存在关系数据库中。我给每个人分配了一个唯一的ID,并希望答案保存为最后一个ID。因此,该表如下所示:

到目前为止,我的代码是:

我试过了

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 = ','))