改进代码-使用R创建新列,它对数据集的一列中被另一列过滤的不同条目进行计数

pgccezyw  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(79)

我有一些工作代码(下面),对于第二列,它创建了它:创建新的数据框,通过特定列过滤原始数据框;对该过滤 Dataframe 的另一列的不同条目进行计数;left将此结果连接到原始数据框。
我想知道是否有一种更干净的方法来实现相同的结果(即,而不是必须创建一个新的 Dataframe 并将其连接到原始 Dataframe )。

# calculate initial column
data <- data %>% 
  group_by(column_a) %>% 
  mutate("total_sub_rows" = sum(column_b == 'specific')) %>% 
  ungroup()

# is there a way to get below into above code?
new_column <- data %>% 
  filter(column_b == 'specific') %>% 
  group_by(column_a) %>% 
  summarise(sub_rows = n_distinct(column_c)) %>% 
  ungroup()

data <- data %>% 
  left_join(new_column)

请看上面的代码,我只是感兴趣,如果有一个更好的方法来写这个。
最终结果的一个例子是:

nnsrf1az

nnsrf1az1#

试试这个,一个虹膜数据集的例子:

library(dplyr)
iris[, c(1,2,5)] %>% 
  group_by(Species) %>% 
  mutate(total_sub_rows = sum(Sepal.Length < 5),
         new_column = n_distinct(if_else(Sepal.Length < 5, Sepal.Width, NA))) %>% 
  ungroup()

在您的具体情况下,它可能是:

library(dplr)

data %>% 
  group_by(column_a) %>% 
  mutate(total_sub_rows = sum(column_b == 'specific'),
         new_column = n_distinct(if_else(column_b == 'specific', column_c, NA))) %>% 
  ungroup()
Sepal.Length Sepal.Width Species total_sub_rows new_column
          <dbl>       <dbl> <fct>            <int>      <int>
 1          5.1         3.5 setosa              20          8
 2          4.9         3   setosa              20          8
 3          4.7         3.2 setosa              20          8
 4          4.6         3.1 setosa              20          8
 5          5           3.6 setosa              20          8
 6          5.4         3.9 setosa              20          8
 7          4.6         3.4 setosa              20          8
 8          5           3.4 setosa              20          8
 9          4.4         2.9 setosa              20          8
10          4.9         3.1 setosa              20          8
# … with 140 more rows
# ℹ Use `print(n = ...)` to see m

相关问题