首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法在变异列中使用表中的查找值?

有没有办法在变异列中使用表中的查找值?
EN

Stack Overflow用户
提问于 2019-01-05 11:36:28
回答 2查看 445关注 0票数 0
代码语言:javascript
复制
  library(tidyverse)

df <- iris %>% 
  group_by(Species) %>% 
  mutate(Petal.Dim = Petal.Length * Petal.Width,
         rank = rank(desc(Petal.Dim))) %>% 
  mutate(new_col = rank == 4, Sepal.Width)


table <- df %>%
  filter(rank == 4) %>%
  select(Species, new_col = Sepal.Width)

correct_df <- left_join(df, table, by = "Species")

df
#> # A tibble: 150 x 8
#> # Groups:   Species [3]
#>    Sepal.Length Sepal.Width Petal.Length Petal.Width Species Petal.Dim
#>           <dbl>       <dbl>        <dbl>       <dbl> <fct>       <dbl>
#>  1          5.1         3.5          1.4         0.2 setosa      0.280
#>  2          4.9         3            1.4         0.2 setosa      0.280
#>  3          4.7         3.2          1.3         0.2 setosa      0.26 
#>  4          4.6         3.1          1.5         0.2 setosa      0.3  
#>  5          5           3.6          1.4         0.2 setosa      0.280
#>  6          5.4         3.9          1.7         0.4 setosa      0.68 
#>  7          4.6         3.4          1.4         0.3 setosa      0.42 
#>  8          5           3.4          1.5         0.2 setosa      0.3  
#>  9          4.4         2.9          1.4         0.2 setosa      0.280
#> 10          4.9         3.1          1.5         0.1 setosa      0.15 
#> # ... with 140 more rows, and 2 more variables: rank <dbl>, new_col <lgl>

我基本上是在寻找new_col来显示Sepal.Width列中对应于rank =4的值。在本例中,这些值为3.9、3.3和3.8。我设想这类似于VLookup,或Excel中的索引/匹配。

EN

回答 2

Stack Overflow用户

发布于 2019-01-05 13:14:06

每当我想“现在我需要像过去在Excel中一样使用VLOOKUP”时,我发现left_join()函数很有帮助。它也是dplyr包的一部分。与在另一个表的一个表中“查找”值不同,R只需创建一个较大的表,其中一个表保持不变(在这里是“左”字或您放入函数中的第一个术语),而另一个表是使用它们共同的一列或多列作为索引添加的。

在您的特定示例中,我不能完全理解您希望new_col包含什么内容。如果你想在R中使用Excel风格的VLOOKUP,那么left_join()是最好的起点。

票数 0
EN

Stack Overflow用户

发布于 2019-01-05 16:45:02

这个问题并不清楚,因为它没有提到来自Excel的Vlookup或类似索引/匹配的操作的目的。而且,如果排名不等于4,你也没有提到"new_col“应该有什么值。假设这个值是NA,下面的解决方案可以用一个简单的if:

代码语言:javascript
复制
df <- iris %>% 
  group_by(Species) %>% 
  mutate(Petal.Dim = Petal.Length * Petal.Width,
     rank = rank(desc(Petal.Dim))) %>% 
  ungroup() %>% 
  mutate(new_col = ifelse(rank == 4, Sepal.Width,NA))

df

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54048750

复制
相关文章

相似问题

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