首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于r中的另一列更新最新列

基于r中的另一列更新最新列
EN

Stack Overflow用户
提问于 2021-10-12 04:36:25
回答 1查看 39关注 0票数 0

假设我有一个很大的数据帧,现在我想根据一列更新另一列

我以前确实问过类似的问题,但在这里我重新改变了格式,并将所有情况合并到一个数据帧中,我认为解决它是值得的。

我想更新基于name2的列name3,并保留另外两个列。我的例子如下

代码语言:javascript
复制
df <- data.frame(ID = c("BF1","BF3", "BF4", "BF3","BF3","BF1", "BF1", "BF1", "BF2", "BF2", "BF3"),
                 value = c(1,2,3,4,5,6,7,8,9,10,11),
                 name2 = c("Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus", "Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus", 
                           "Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus", "Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus", 
                           "Senegalia rugata (Lam.) Britton & Rose", "Acacia pinnata", "Acacia pinnata", "Acer laurinum", "Acer laurinum Hassk.", "Acmella paniculata", "Acmella paniculata"),
                 name3 = c("Hydnocarpus sumatrana", "Hydnocarpus sumatrana", "Hydnocarpus sumatrana", "Hydnocarpus sumatranus (Miq.) Koord.","Acacia pinnata", "Acacia pinnata", 
                           "Acacia pinnata", "Acer laurinum", "Acer laurinum Hassk.", "Acmella paniculata", "Acmella paniculata"))

df

    ID value                                                name2                                name3
1  BF1     1 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus                Hydnocarpus sumatrana
2  BF3     2 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus                Hydnocarpus sumatrana
3  BF4     3 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus                Hydnocarpus sumatrana
4  BF3     4 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus Hydnocarpus sumatranus (Miq.) Koord.
5  BF3     5               Senegalia rugata (Lam.) Britton & Rose                       Acacia pinnata
6  BF1     6                                       Acacia pinnata                       Acacia pinnata
7  BF1     7                                       Acacia pinnata                       Acacia pinnata
8  BF1     8                                        Acer laurinum                        Acer laurinum
9  BF2     9                                 Acer laurinum Hassk.                 Acer laurinum Hassk.
10 BF2    10                                   Acmella paniculata                   Acmella paniculata
11 BF3    11                                   Acmella paniculata                   Acmella paniculata

首先,我想通过Senegalia rugata (Lam.) Britton & Rose更新Acacia pinnata,条件是name2的字符与name3匹配(即Acacia pinnata),同时,name3的字符与name2的另一个字符在同一行(即Senegalia rugata (Lam.) Britton & Rose - name2和Acacia pinnata - name3 )。

其次,我想用Acer laurinum Hassk.替换Acer laurinum,如果两个它们的第一个字符串相似,就去取更长的那个。如果我们与str_detect一起使用,这是可能的吗

最后,我想要的表如下所示

代码语言:javascript
复制
    ID value                                                name2                                name3
1  BF1     1 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus                Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus
2  BF3     2 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus                Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus
3  BF4     3 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus                Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus
4  BF3     4 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus
5  BF3     5               Senegalia rugata (Lam.) Britton & Rose                       Senegalia rugata (Lam.) Britton & Rose
6  BF1     6                                       Acacia pinnata                       Senegalia rugata (Lam.) Britton & Rose
7  BF1     7                                       Acacia pinnata                       Senegalia rugata (Lam.) Britton & Rose
8  BF1     8                                        Acer laurinum                        Acer laurinum Hassk.
9  BF2     9                                 Acer laurinum Hassk.                 Acer laurinum Hassk.
10 BF2    10                                   Acmella paniculata                   Acmella paniculata
11 BF3    11                                   Acmella paniculata                   Acmella paniculata

对我有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2021-10-12 06:26:31

这是你想要的吗?如果没有,请让我知道。

代码语言:javascript
复制
df %>%
  rowwise %>%
  mutate(name3 = case_when(
    name3 == 'Acacia pinnata' & name2 %in% c("Senegalia rugata (Lam.) Britton & Rose", "Acacia pinnata") ~ "Senegalia rugata (Lam.) Britton & Rose",
    str_detect(name3, "Acer laurinum") ~ "Acer laurinum Hassk.",
    TRUE ~ name3
    ))

   ID    value name2                                                name3                                 
   <chr> <dbl> <chr>                                                <chr>                                 
 1 BF1       1 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus Hydnocarpus sumatrana                 
 2 BF3       2 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus Hydnocarpus sumatrana                 
 3 BF4       3 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus Hydnocarpus sumatrana                 
 4 BF3       4 Hydnocarpus sumatranus (Miq.) Koord. var. sumatranus Hydnocarpus sumatranus (Miq.) Koord.  
 5 BF3       5 Senegalia rugata (Lam.) Britton & Rose               Senegalia rugata (Lam.) Britton & Rose
 6 BF1       6 Acacia pinnata                                       Senegalia rugata (Lam.) Britton & Rose
 7 BF1       7 Acacia pinnata                                       Senegalia rugata (Lam.) Britton & Rose
 8 BF1       8 Acer laurinum                                        Acer laurinum Hassk.                  
 9 BF2       9 Acer laurinum Hassk.                                 Acer laurinum Hassk.                  
10 BF2      10 Acmella paniculata                                   Acmella paniculata                    
11 BF3      11 Acmella paniculata                                   Acmella paniculata 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69535124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档