R如果一列满足某个条件,则复制整个角色

R如果一列满足某个条件,则复制整个角色,r,R,我不知道如何解决这个问题。我的数据框看起来像这样,但要大得多: df <- data.frame(word = c('word1','word2', 'word3', 'word4', 'word5', 'word6', 'word7'), code = c(1 , 2, 2, 2, 1, 1, 2), modality = c('cog', 'emo', 'soc', 'cog_emo', 'soc', 'soc_emo_cog', 'emo')) df word code

我不知道如何解决这个问题。我的数据框看起来像这样,但要大得多:

df <- data.frame(word = c('word1','word2', 'word3', 'word4', 'word5', 'word6', 'word7'), code = c(1 , 2, 2, 2, 1, 1, 2), modality = c('cog', 'emo', 'soc', 'cog_emo', 'soc', 'soc_emo_cog', 'emo'))
df
   word code    modality
1 word1    1         cog
2 word2    2         emo
3 word3    2         soc
4 word4    2     cog_emo
5 word5    1         soc
6 word6    1 soc_emo_cog
7 word7    2         emo
正如我所说的,数据帧要大得多,所以我不能手动操作。 谢谢

tidyr::单独的_行正好适用于这种情况

library(tidyverse)

df %>% mutate(modality = str_split(modality, "_")) %>% unnest(modality)

   word   code modality
   <fct> <dbl> <chr>   
 1 word1     1 cog     
 2 word2     2 emo     
 3 word3     2 soc     
 4 word4     2 cog     
 5 word4     2 emo     
 6 word5     1 soc     
 7 word6     1 soc     
 8 word6     1 emo     
 9 word6     1 cog     
10 word7     2 emo  
图书馆三年 df%>%单独的行日期,sep='' >一个tibble:10x3 >字码模态 > >1字1齿 >2字2 emo >3字3 2 soc >4字4 2齿轮 >5个单词4个2 emo >6字5 1 soc >7字6 1 soc >8字6 1表情符号 >9字6 1齿轮 >10字7.2 emo 由v2.0.0于2021年6月11日创建的tidyr::separate_行正好适用于此场景

图书馆三年 df%>%单独的行日期,sep='' >一个tibble:10x3 >字码模态 > >1字1齿 >2字2 emo >3字3 2 soc >4字4 2齿轮 >5个单词4个2 emo >6字5 1 soc >7字6 1 soc >8字6 1表情符号 >9字6 1齿轮 >10字7.2 emo 由v2.0.0于2021年6月11日创建,这里有一个data.table选项

这里有一个data.table选项

强大的分离行!强大的分离行!
library(tidyverse)

df %>% mutate(modality = str_split(modality, "_")) %>% unnest(modality)

   word   code modality
   <fct> <dbl> <chr>   
 1 word1     1 cog     
 2 word2     2 emo     
 3 word3     2 soc     
 4 word4     2 cog     
 5 word4     2 emo     
 6 word5     1 soc     
 7 word6     1 soc     
 8 word6     1 emo     
 9 word6     1 cog     
10 word7     2 emo  
> setDT(df)[,.(modality = unlist(strsplit(modality,"_"))),.(word,code)]
     word code modality
 1: word1    1      cog
 2: word2    2      emo
 3: word3    2      soc
 4: word4    2      cog
 5: word4    2      emo
 6: word5    1      soc
 7: word6    1      soc
 8: word6    1      emo
 9: word6    1      cog
10: word7    2      emo