用R中的`dplyr`识别列等级

时间:2018-04-19 03:03:28

标签: r dplyr

我一直在使用dplyr来解决这个问题,但似乎无法找到一个好的解决方案。基本上,我有学生的姓名,学年和一些数字统计数据。像这样:

Name     Yr.     Stat_1     ...
A        Fr.     5
B        Fr.     5
A        So.     5
A        Jr.     5
B        So.     5
C        Sr.     5

我知道我可以使用命令dplyr::mutate(count = n())在我完成group_by()后查找单个学生的行数,但我想使用行数每个人都在众多统计数据的加权总和中(如果你愿意,可以使用混合模型)。但是,有一种情况,例如学生C,(无论是转学等)只作为一个Sr出现在数据中,所以我不能简单地使用一个大四学生已经进入第四年的理解。因此,我想将上表重新配置为如下所示,以便我可以使用dplyr的{​​{1}}和group_by()功能对各种统计信息进行加权。

mutate()

请注意Name Yr. Numb Stat_1 ... A Fr. 1 5 B Fr. 1 5 A So. 2 5 A Jr. 3 5 B So. 2 5 C Sr. 1 5 的{​​{1}}为1而不是4.我希望对此问题有任何帮助或指导。

2 个答案:

答案 0 :(得分:1)

我们可以在按名称'

分组后使用row_number
library(dplyr)
df1 %>% 
   group_by(Name) %>%
   mutate(Numb = row_number())
# A tibble: 6 x 4
# Groups: Name [3]
#  Name  Yr.   Stat_1  Numb
#  <chr> <chr>  <int> <int>
#1 A     Fr.        5     1
#2 B     Fr.        5     1
#3 A     So.        5     2
#4 A     Jr.        5     3
#5 B     So.        5     2
#6 C     Sr.        5     1

答案 1 :(得分:0)

这应该这样做:

df <- df %>%
  group_by(Name) %>%
  mutate(
    class = factor(Yr.,levels = c("Fr.", "So.", "Jr.", "Sr.")) %>% as.numeric(),
    years = n()
  ) %>%
  group_by(Name, Yr.) %>%
  mutate(
    Numb = min(class, years)
  ) %>%
  ungroup()

如果它们没用,你可以去掉课堂和年后。