簡體   English   中英

如何根據 R 中的條件創建新列

[英]How to create a new column based on conditions in R

我有 3 個班級的學生A、BC 我的可重現數據集如下所示:

data <- data.frame(Student_ID =c(1,1,1,2,2,3,3,3,3,3,4,4,4,5,6,6,7,7,7,8,8),
                   Years_Attended = c(1991,1992,1995,1992,1993,1991,1992,1993,1994,1995,1993,1994,1995,1995,1993,1995,1990,1995,2000,1995,1996),
                   Class = c("A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","C","C","C","C","C"))

我想使用 R 在我的數據框中添加一個新列(新學生)。 我將“新生”定義為在任何給定 class 的第一年(即最低年份)沒有參加的任何學生。 我的預期輸出如下所示:

Intended_output <- data.frame(Student_ID = c(1,1,1,2,2,3,3,3,3,3,4,4,4,5,6,6,7,7,7,8,8),
                              Years_Attended = c(1991,1992,1995,1992,1993,1991,1992,1993,1994,1995,1993,1994,1995,1995,1993,1995,1990,1995,2000,1995,1996),
                              Class = c("A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","C","C","C","C","C"),
                              New_Student = c("No","No","No","Yes","Yes","No","No","No","No","No","No","No","No","Yes","No","No","No","No","No","Yes","Yes"))

我努力了:

data$New_student <- ifelse(data$Years_Attended != min(data$Years_Attended, "Yes", "No"))

但我不斷收到我不完全理解的錯誤。 我一直在循環一段時間。 我將非常感謝任何有關此的指示。 解決方案不一定必須使用“ifelse”語句。 任何方法都將受到贊賞。

這是data.table方法:

library(data.table)
dt = as.data.table(data)
dt[, New_Student := {
    class_min = min(Years_Attended)
    ave(Years_Attended, Student_ID, FUN = function(x) ifelse(class_min != min(x), 'Yes', 'No'))
    },
   by = Class]

這實際上是一個復雜的問題。 我們需要找到每個 class 的最小年份,然后在每個 class 中找出哪些學生的開始年份不等於最小 class 年份。

對於每個Class找到年份的最小值,將此作為新列添加到您的數據集中,並為每個學生檢查他們是否參加了那一年。

library(dplyr)

data %>%
  group_by(Class) %>%
  summarise(min_year = min(Years_Attended)) %>%
  left_join(data, by = 'Class') %>%
  group_by(Class, Student_ID) %>%
  mutate(New_Student = if(any(Years_Attended == first(min_year)))'No' else 'Yes')

#  Class min_year Student_ID Years_Attended New_Student
#   <chr>    <dbl>      <dbl>          <dbl> <chr>      
# 1 A         1991          1           1991 No         
# 2 A         1991          1           1992 No         
# 3 A         1991          1           1995 No         
# 4 A         1991          2           1992 Yes        
# 5 A         1991          2           1993 Yes        
# 6 A         1991          3           1991 No         
# 7 A         1991          3           1992 No         
# 8 A         1991          3           1993 No         
# 9 A         1991          3           1994 No         
#10 A         1991          3           1995 No         
# … with 11 more rows

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM